**:
使用ok335xd核心板上的nand flash,無論是速度還是穩定性,都比sd卡好,所以接下來的任務是使用sd中的u-boot操作nand flash,把需要的映象燒錄進去之後,就可以從nand flash啟動了!
第一步:按照《u-boot for am335x》的步驟準備好:
ok335x開發板
按照ti公司官方文件的要求,格式化的sd卡(create-sdcard.sh)
準備乙份編譯通過的可用的u-boot源**(uart/mmc0/eth/gpio/i2c功能)
uimage和檔案系統映象
第二步:修改u-boot源**中mux部分:
static struct module_pin_mux nand_pin_mux = ,,,
,,,,
,,,,
,,,,
};別忘了執行下面這句:
configure_module_pin_mux(nand_pin_mux);
第三步:在u-boot源**中board_init函式中新增:
gpmc_init();
第四步:在include/configs/maria_am335x.h中新增:
#define config_cmd_nand
#define config_sys_max_nand_device 1
#define config_sys_nand_base 0x800000
#define config_nand_omap_gpmc
#define config_nand_omap_elm
#define config_sys_nand_5_addr_cycle
#define config_sys_nand_page_count (config_sys_nand_block_size / \
config_sys_nand_page_size)
#define config_sys_nand_page_size 2048
#define config_sys_nand_oobsize 64
#define config_sys_nand_block_size (128*1024)
#define config_sys_nand_bad_block_pos nand_large_badblock_pos
#define config_sys_nand_eccpos
#define config_sys_nand_eccsize 512
#define config_sys_nand_eccbytes 14
#define config_sys_nand_onfi_detection
#define config_nand_omap_eccscheme omap_ecc_bch8_code_hw
#define config_sys_nand_u_boot_start config_sys_text_base
#define config_sys_nand_u_boot_offs 0x80000
為什麼不直接只用config_nand,這些巨集不就跟著定義了嗎?
因為config_nand的含義是從nand啟動,而這裡只是要對nand flash進行讀取和燒寫操作,booting裝置還是sd卡。
第五步:修改arch/arm/cpu/armv7/am33xx/mem.c中的"gpmc_init"函式:
void gpmc_init(void)
;u32 size = gpmc_size_256m;
u32 base = config_sys_nand_base;
writel(0x00000008, &gpmc_cfg->sysconfig);
writel(0x00000000, &gpmc_cfg->irqstatus);
writel(0x00000000, &gpmc_cfg->irqenable);
writel(0x00000012, &gpmc_cfg->config);
writel(0, &gpmc_cfg->cs[0].config7);
sdelay(1000);
enable_gpmc_cs_config(gpmc_regs, &gpmc_cfg->cs[0], base, size);
}這是因為gpmc_init依賴於config_nand,要不然基本不幹活,因此去掉它的巨集判斷。
第六步:編譯它:
make arch=arm cross_compile=/opt/arm-arago-linux-gcc/usr/bin/arm-linux-gnueabihf- -j8 o=../build maria_am335x_config
make arch=arm cross_compile=/opt/arm-arago-linux-gcc/usr/bin/arm-linux-gnueabihf- -j8 o=../build all
第七步:將生成的mlo和u-boot.img放置到sd卡中:
cp ../build/mlo ../build/u-boot.img /run/media/maria/boot/
第八步:開發板插入sd卡,設定為從sd卡啟動,上電。
在命令提示符下輸入:
u-boot# set ipaddr 192.168.1.117
u-boot# set serverip 192.168.1.116
u-boot# tftp 0x82000000 mlo
u-boot# nand erase 0x0 0x20000
u-boot# nand write.i 0x82000000 0x0 0x20000
u-boot# tftp 0x82000000 u-boot.img
u-boot# nand erase 0x80000 0x40000
u-boot# nand write.i 0x82000000 0x80000 0x40000
這些命令的含義是,從tftp伺服器上獲取mlo和u-boot.img,存放在sdram的0x82000000處,並分別燒寫在nand flash的0x0和0x80000位址。拔除sd卡,重新上電,就能看到u-boot從nand flash啟動的串列埠列印資訊了!
notice: 存放在tftp上的mlo和u-boot.img不能是forlinx光碟裡面的映象,也不是上面所述的這個,而是需要使用全新的源**重新編譯。因為forlinx和這裡的mlo和u-boot.img都是從sd卡啟動的,全新編譯出來的應該是從nand flash啟動。參照boards.cfg檔案!
AM335X linux嵌入式平台can驅動移植
由於板子需要用到can 需要配置kernel支援can匯流排 配置kernel 一 確認原理圖 can0 tx d18 can0 rx d17 二 確認暫存器 在am3359.pdf中 檢視模式 這裡tx rx都是mode2 配置pin的時候需要按照這個來配置 檢視暫存器位址 這裡檢視 d can0...
AM335X Nand Flash 啟動除錯
nand 除錯成功了。具體修改下面描述 硬體修改 根據原理圖發現 am335x 目前預設是 sd 卡啟動,所以需要配置一下 sysboot 從nand啟動,官方文件 這裡對 sysboot 的配置有詳細的介紹,結合 am335x technical reference.pdf 和 原理圖找到對應的 ...
am335x watchdog 裝置出錯
am335x watchdog 裝置節點開啟失敗。如果是直接將omap wdt 直接編譯成uimage,這樣會出現開啟檔案節點失敗的情況。如果單獨編譯成模組在後面檔案系統內插入則不會。將omap wdt 單獨編譯成模組,在檔案系統層新增。在kernel3.2中 make menuconfig dev...