快讯
HOME
快讯
正文内容
nand烧写 rootfs 如何为SD卡与NAND Flash的uboot加上menu菜单
发布时间 : 2024-11-23
作者 : 小编
访问数量 : 23
扫码分享至微信

如何为SD卡与NAND Flash的uboot加上menu菜单

  亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。  【SD NAND】用ok6410进行烧写时,每次都需要敲一大堆命令,又费时又费力。 记得以前用TQ2440时,u-boot启动时会有一个菜单,只按一个数字键就把内核烧好了,非常方便。  现在这张SD卡功能就很全面了,不仅能够直接从SD卡启动,而且还可以烧写NAND Flash中的u-boot zImage rootfs,呵呵。  下面就把这个功能加到ok6410的u-boot 中去。  一、修改SD卡的u-boot1.1.6  1. common/main.c中  void main_loop (void)  {  ……  if(bootdelay>=0&&s&&!abortboot(bootdelay)){ }  //如果在启动过程中有按键,打断了执行过程的话  run_command("menu",0);  //如果menu返回的话,就进入u-boot的shell中  #ifdef CFG_HUSH_PARSER  parse_file_outer();  ……  }  2. 执行menu的过程  run_command("menu", 0),最终会执行do_menu.  do_menu 开始时先打印出命令菜单,然后根据不同的选择,执行不同的命令。  所以添加的文件 common/cmd_menu.c,如下:  #include  #include  #include  #include  void print_menu_usage(void)  {  printf("rn##### SD boot Menu#####rn");  printf("[1] Download u-boot bootloader to Nand Flashrn");  printf("[2] Download Linux Kernel to Nand Flashrn");  printf("[3] Download CRAMFS image to Nand Flashrn");  printf("[4] Download YAFFS image to Nand Flashrn");  printf("[5] Boot the systemrn");  printf("[6] Format the Nand Flashrn");  printf("[0] Set the boot parametersrn");  printf("[a] Download User Program (eg: uCOS-II or TQ2440_Test)rn");  printf("[b] Download LOGO Picture (。bin) to Nand Flash rn");  printf("[q] quit from menurn");  printf("Enter your selection: ");  }  intdo_menu(cmd_tbl_t*cmdtp,intflag,intargc,char*argv[])  {  intc;  char cmd_buf[200];  while(1)  {  print_menu_usage();  c=getc();  printf("%cn",c);  switch(c)  {  case'1':  {  strcpy(cmd_buf,"fatload mmc 0:1 50008000 u-boot.bin_nand; nand erase 0 100000; nand write.uboot 50008000 0 10000");  run_command(cmd_buf,0);  break;  }  case'2':  {  strcpy(cmd_buf,"fatload mmc 0:1 50008000 zImage_nand; nand erase 100000 500000; nand write.e 50008000 100000 500000");  run_command(cmd_buf,0);  break;  }  case'3':  {  //strcpy(cmd_buf,"fatload mmc 0:1 50008000 u-boot.bin; nand erase 0 100000; nand write.uboot 50008000 0 10000");  //run_command(cmd_buf,0);  break;  }  case'4':  {  //strcpy(cmd_buf,"fatload mmc 0:1 50008000 rootfs.yaffs; nand erase 600000 4A4000; nand write.yaffs2 50008000 600000 4A4000");  //strcpy(cmd_buf,"fatload mmc 0:1 50008000 rootfs.yaffs; nand erase 600000 $(filesize); nand write.yaffs2 50008000 600000 $(filesize)");  //注意:nand erase 600000 $(filesize),假设有坏块的话,这样会有数据不能写入, 所以这个地方可以固定一个较大值,如  // 0x1400000=20M,所以rootfs.yaffs的大小不能超过20M,  //考虑此处是不是要加上NAND Flash分区: nand erase root,把整个的root分区全部擦除,这样就不必担心是否有坏块的问题了  strcpy(cmd_buf,"fatload mmc 0:1 50008000 rootfs.yaffs; nand erase 600000 1400000; nand write.yaffs2 50008000 600000 $(filesize)");  run_command(cmd_buf,0);  break;  }  case'5':  {  strcpy(cmd_buf,"bootm 50008000");  run_command(cmd_buf,0);  break;  }  case'q':  return;  default:  printf("command not foundn");  break;  }  }  }  U_BOOT_CMD(  menu,5,1,do_menu,  "menu - manipulate BMP image datan",  "menu long help: TNND mu you"  );  3. 添加到Makefile中  最后在common/Makefile中添加一行  COBJS+=cmd_menu.o  注意:在组合命令时,如NAND write不知道烧写的大小怎么办? 没关系,有变量 $(filesize), 只要加上这个任何问题都不再困难。  上面的50008000是从SD卡启动时,要读到的内存地址; 若是从Nand Flash启动要把上面的50008000改为C0008000  二。 测试一下  2.1 sd卡  a. 因为都是从SD卡和第一个分区读数据,所以将SD卡分区时第一个分区格式必须为FAT32.  b. 编译u-boot.bin:  代码要用光盘中带的u-boot,这个支持从NAND Flash 启动  make forlinx_nand_ram256_config, 后生成 u-boot.bin  复制到SD卡的第一个分区, 并改名为 u-boot.bin_nand(要与u-boot代码中的名称保持一致)  c. 编译zImage  代码要用光盘中带的linux-3.0.1, make后生成zImage  复制到SD卡的第一个分区, 并改名为 zImage_nand(要与u-boot代码中的名称保持一致)  d. 生成rootfs.yaffs  可以用光盘中带的FileSystem-Yaffs2.tar.gz, 解压后,嫌太大,把不需要的删掉,  里面的busybox好像是动态链接的,自己编个静态的busybox,最后生成rootfs.yaffs  sudo /opt/6410/4.3.2/bin/mkyaffs2image-nand2g FileSystem-Yaffs2 rootfs.yaffs  NAND Flash 是2G的所以要用命令 mkyaffs2image-nand2g  将rootfs.yaffs复制到SD卡的第一个分区(要与u-boot代码中的名称保持一致)  注意: 如果不确定rootfs本身有没有问题,可以先从nfs启动,看是否正常。  如果正常再用mkyaffs2image-nand2g,做成yaffs镜像烧入到NAND Flash中。  亲爱的卡友们,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业13年,专业提供小容量存储解决方案。

基于AM335X开发板 ARM Cortex-A8——NAND FLASH版本核心板使用说明

前 言:

NAND FLASH版本和eMMC版本核心板使用方法基本一致。本文主要描述U-Boot编译、基础设备树文件编译、固化Linux系统NAND FLASH分区说明和NAND FLASH启动系统、固化Linux系统、AND FLASH读写测试等,NAND FLASH版本与eMMC版本核心板在使用方面的不同之处,相同之处将不重复描述。

创龙科技TL335x-EVM-S是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的评估板。

评估板接口资源丰富,引出双路千兆网口、LCD、HDMI、GPMC、CAN等接口,方便用户快速进行产品方案评估与技术预研,应用在通讯管理、数据采集、人机交互、运动控制、智能电力等典型领域。

U-Boot编译

进行U-Boot编译选项配置时,请执行如下命令。

Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_s_nandboot_defconfig

图 1

我司提供经过验证的U-Boot镜像文件位于产品资料“4-软件资料\Linux\U-Boot\image\u-boot-2017.01-[Git系列号]-[版本号]\”目录下,分别为MLO-nand、u-boot.img-nand。系统启动卡制作完成后,请将MLO-nand和u-boot.img-nand文件复制到系统启动卡BOOT分区下,备份原有的eMMC版本MLO、u-boot.img文件,并将MLO-nand和u-boot.img-nand文件重命名为MLO、u-boot.img。

图 2

Host# sudo cp MLO-nand MLO

Host# sudo cp u-boot.img-nand u-boot.img

图 3

基础设备树文件编译

基础设备树源文件为内核源码“arch/arm/boot/dts/”目录下的tl335x-evm-s-nandflash.dts和tl335x-evm-s-nandflash-hdmi.dts,重新编译基础设备树时请使用此文件。我司提供经过验证的基础设备树文件为产品资料“4-软件资料\Linux\Kernel\image\linux-rt-4.9.65-[Git系列号]-[版本号]\”目录下的tl335x-evm-s-nandflash.dtb和tl335x-evm-s-nandflash-hdmi.dtb,请将其分别复制到系统启动卡rootfs分区以及rootfs-backup分区的boot目录下。

图 4

请执行如下命令将tl335x-evm.dtb软链到tl335x-evm-s-nandflash.dtb文件。tl335x-evm-s-nandflash.dtb支持LCD显示,如需使用HDMI显示,则将tl335x-evm.dtb软链到tl335x-evm-nandflash-hdmi.dtb文件即可。

Host# sudo rm tl335x-evm.dtb

Host# sudo ln -s tl335x-evm-s-nandflash.dtb tl335x-evm.dtb

Host# ls -l

图 5

使用替换了U-Boot和基础设备树文件的Linux系统启动卡启动评估板,进入文件系统执行如下命令可查看到NAND FLASH分区信息,即说明文件替换成功。

Target# cat /proc/mtd

图 6

固化Linux系统

本章节介绍Linux系统固化过程,包括固化U-Boot、内核、设备树和文件系统至NAND FLASH。

NAND FLASH分区说明

进入评估板系统后执行如下命令,查看NAND FLASH分区信息。

Target# cat /proc/mtd

图 7

表 1

NAND FLASH

MTD0

nand.spl:存放U-Boot第一阶段启动文件MLO

MTD1

nand.u-boot:存放U-Boot第二阶段启动文件u-boot.img

MTD2

nand.env:存放环境变量

MTD3

nand.devicetree:存放设备树文件

MTD4

nand.kernel:存放内核镜像

MTD5

nand.logo:存放LOGO文件

MTD6

nand.mini-fs:备用分区,一般存放小型文件系统(暂未使用)

MTD7

nand.rootfs:存放文件系统

固化Linux系统

Linux系统启动卡制作时,已将系统固化的脚本文件mknandboot.sh复制到了Linux系统启动卡文件系统的“/opt/tools/”目录下。

图 8

执行如下命令进行一键固化。

Target# /opt/tools/mknandboot.sh

图 9

脚本会进行如下操作:

擦除NAND FLASH。将Linux系统启动卡BOOT分区中的U-Boot、LOGO固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统boot目录下的内核镜像和基础设备树文件固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统固化至NAND FLASH对应分区。

用时约5~10min,Linux系统固化成功,同时串口调试终端打印提示信息。

从NAND FLASH启动系统

评估板断电,将Linux系统启动卡从评估板Micro SD卡槽中取出,根据评估底板丝印将拨码开关拨为10110(1~5),此档位为NAND FLASH启动模式。评估板上电,串口调试终端将会打印如下类似启动信息。

图 10

图 11

NAND FLASH读写测试

本章节对NAND FLASH的MTD6分区进行读写速度测试。MTD6是NAND FLASH的备用分区,一般存放小型文件系统,大小为32MByte。读写测试会将该分区内容擦除,请做好数据备份。

执行如下命令查询NAND FLASH分区,确认MTD6分区大小(读写请勿超出分区大小),将该分区内容擦除。

Target# cat /proc/mtd

Target# flash_erase /dev/mtd6 0 0

图 12

NAND FLASH写速度测试

进入评估板文件系统,执行如下命令对NAND FLASH进行写速度测试。

Target# time dd if=/dev/zero of=/dev/mtd6 bs=1024k count=30

图 13

此处一共写30MByte测试数据到NAND FLASH的MTD6分区下,可看到本次测试的NAND FLASH写速度约为:30MByte/7.79s=3.85MB/s。

NAND FLASH读速度测试

重启评估板,进入评估板文件系统,执行如下命令对NAND FLASH进行读速度测试。

Target# time dd if=/dev/mtd6 of=/dev/null bs=1024k count=30

图 14

此处从NAND FLASH的MTD6分区读取30MByte数据,可看到本次测试的NAND FLASH读速度约为:30MByte/4.44s=6.75MB/s。

相关问答

如何查看linux根分区下全部目录及文件的大小-ZOL问答

中关村在线vivoX90Pro+举报恩悠6人讨论9677次围观关注问题写回答讨论回答(6)duoduoannidu命令用于查看磁盘的使用量,格式为:“du[选项][文件]”...

为什么nfs一直挂载失败-ZOL问答

mount-tnfsip地址(如:xxx.xxx.xxx.xxx):/要挂载的目录/挂载点。刚刚在希赛上看见这个资料了,希望可以帮助到你!有用(0)回复和你的使用目的有关:1、开发....

物理电源符号?

26.VTT:一般VTT=1/2VDDQ,也是在DDR里面用到的,给一些控制信号提供电源的。27.VCCQ:一般在NANDFLASH中使用到,比如手机常用的EMMC、UFS等存储器,一般给IO.....

android手机一般几点几系统的好-ZOL问答

没有机型这个很笼统,怎么说,一般是root后替换system\ect\的vold.fstab和vold.fstab.nand两个文件,我的手机是中兴v970,就是这样解决的有用(0)回复展开查看...

 阿布扎比赛道  螺旋伞齿轮 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部