AM335X Nand Flash 启动调试
Nand 调试成功了。 具体修改下面描述:
根据原理图发现 AM335X 目前默认是 SD 卡启动,所以需要配置一下 SYSBOOT 从NAND启动,官方文档:
根据??http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide?文档中介绍的 Nand Flash 的 NAND Layout,描述 UBOOT,KERNEL,ROOTFS,MLO,DT(device tree)的空间分布,烧写到对应的 NAND Flash上。 但这份文档比较老(基于 SDK 6.0),我们使用的是 SDK 8.0,所以需要根据 am335x-evm.h 中的 NAND Layout 来烧写: U-Boot# mtdparts default U-Boot# mtdparts device nand0 <nand.0>,# parts = 10 #: name size offset mask_flags 0: NAND.SPL 0x00020000 0x00000000 0 1: NAND.SPL.backup1 0x00020000 0x00020000 0 2: NAND.SPL.backup2 0x00020000 0x00040000 0 3: NAND.SPL.backup3 0x00020000 0x00060000 0 4: NAND.u-boot-spl-os 0x00040000 0x00080000 0 5: NAND.u-boot 0x00100000 0x000c0000 0 6: NAND.u-boot-env 0x00020000 0x001c0000 0 7: NAND.u-boot-env.backup10x00020000 0x001e0000 0 8: NAND.kernel 0x00800000 0x00200000 0 9: NAND.file-system 0x0f600000 0x00a00000 0 active partition: nand0,0 - (NAND.SPL) 0x00020000 @ 0x00000000 defaults: mtdids : nand0=nand.0 mtdparts: mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system) U-Boot# 可以查看NAND 的 Layout。一共分了10个区,描述见上面。 Nand 的 Pinmux 也是必须要配置的: else if (board_is_evm_sk(header)) { /* Starter Kit EVM */ puts("Starter Kit EVMn"); enable_uart0_pin_mux(); enable_uart1_pin_mux(); configure_module_pin_mux(i2c1_pin_mux); configure_module_pin_mux(gpio0_7_pin_mux); configure_module_pin_mux(rgmii1_pin_mux); configure_module_pin_mux(mmc0_pin_mux_sk_evm); configure_module_pin_mux(nand_pin_mux); } 依然使用了官方的 Kernel(在SDK中携带的),而非自己编译的,理由是还没确定原因是什么,自己编译的KERNEL 认不到 USB 。 此时 Uboot 能够正常引导 Kernel,但是Uboot 无法支持/操作 UBIFS(不是必须)。 还需要在 am335x-evm.h 中配置: #define CONFIG_CMD_UBIFS #define CONFIG_CMD_UBI #define CONFIG_CMD_MTDPARTS #define CONFIG_MTD_DEVICE #define CONFIG_MTD_PARTITIONS #define CONFIG_LZO /* needed for UBI */ #define CONFIG_RBTREE /* needed for UBI */ #define CONFIG_FIT 此时能够支持Uboot中的所有 UBI 操作,但意义不大,此项可有可无。 ECC 配置: #define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW Device Tree配置: ocp { gpmc: gpmc@50000000 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&nandflash_pins_s0>; ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */ nand@0,0 { reg = <0 0 0>; /* CS0,offset 0 */ nand-bus-width = <8>; ti,nand-ecc-opt = "bch8"; gpmc,device-nand = "true"; gpmc,device-width = <1>; gpmc,sync-clk-ps = <0>; gpmc,cs-on-ns = <0>; gpmc,cs-rd-off-ns = <30>; gpmc,cs-wr-off-ns = <30>; gpmc,adv-on-ns = <0>; gpmc,adv-rd-off-ns = <30>; gpmc,adv-wr-off-ns = <30>; gpmc,we-on-ns = <0>; gpmc,we-off-ns = <20>; gpmc,oe-on-ns = <10>; gpmc,oe-off-ns = <30>; gpmc,access-ns = <30>; gpmc,rd-cycle-ns = <30>; gpmc,wr-cycle-ns = <30>; gpmc,wait-on-read = "true"; gpmc,wait-on-write = "true"; gpmc,bus-turnaround-ns = <0>; gpmc,cycle2cycle-delay-ns = <50>; gpmc,clk-activation-ns = <0>; gpmc,wait-monitoring-ns = <0>; gpmc,wr-access-ns = <30>; gpmc,wr-data-mux-bus-ns = <0>; #address-cells = <1>; #size-cells = <1>; elm_id = <&elm>; /* MTD partition table */ partition@0 { label = "SPL"; reg = <0x00000000 0x000020000>; }; partition@1 { label = "SPL_backup1"; reg = <0x00020000 0x00020000>; }; partition@2 { label = "SPL_backup2"; reg = <0x00040000 0x00020000>; }; partition@3 { label = "SPL_backup3"; reg = <0x00060000 0x00020000>; }; partition@4 { label = "dtb"; reg = <0x00080000 0x00040000>; }; partition@5 { label = "U-boot"; reg = <0x000c0000 0x00100000>; }; partition@6 { label = "env"; reg = <0x001c0000 0x00020000>; }; partition@7 { label = "env_backup1"; reg = <0x001e0000 0x00020000>; }; partition@8 { label = "Kernel"; reg = <0x00200000 0x00800000>; }; partition@9 { label = "File-System"; reg = <0x00a00000 0x0f600000>; }; }; }; }; * * * * &elm { status = "okay"; }; 这三行必须加上,因为根据官方文档,elm 默认是 disable的,需要确认打开。
}; 文件系统制作: yum install liblzo2-devel 编译: 宗旨是缺什么安装什么。 文件系统制作: mkfs.ubifs -F -q -r ./filesystem/ -m 2048 -e 126976 -c 2047 -o ubifs.img ubinize -v -o root.ubi -m 2048 -p 128KiB -s 2048 ./ubifs 注意几个点: 我遇到的错误就比如:
注意给KERNEL 的参数 ubi.mtd=9,表示 mtd9 号,对应的就是 File-system 分区,默认是 ubi.mtd=NAND.rootfs。改一下 后来找到了一个快速调试Nand的方法: 首先SD卡启动,这个更换 uboot,kernel ,文件系统都非常方便,从SD卡的启动Uboot之后。烧写 NAND,弄完了,直接在uboot中敲打命令:run nandboot. 而不需要担心Nand烧坏了,焊接那么麻烦。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |