新四季網

nand flash的尋址方式是什麼(如何為SD卡與NANDFlash的uboot加上menu菜單)

2023-05-09 10:07:44 1

  親愛的卡友們,如果看完文章之後還是有疑惑或不懂的地方,請聯繫我們,自己去理解或猜答案是件很累的事,請把最麻煩的事情交給我們來處理,術業有專攻,聞道有先後,深圳市雷龍發展專注存儲行業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年,專業提供小容量存儲解決方案。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了