嵌入式系统,如果不研究UBOOT,那么可以说你不是一个嵌入式工程师,本文着重选取了工作中遇到的一些UBOOT相关的实际问题。包括网上搜集的一些东西
【】为hsy75注解
1 uboot 的启动分区设置:这是系统软件配置的基本,根据,系统硬件所含的各种存储设备的大小,已经系统各种应用占用空间的设置来设置不同的启动分区:
1.1 基础命令:
1.1.1 gcs学习:(这也许是自己定义的cmd,使用可以参考ref 1:)
- gcs - GCS sub-system
- gcs info 拿到系统的存储器配置
@ gcs info
GCS Flash Info--
BOOT Device:--SFC Flash.【boot device】
ALT Flash Device:--NAND Flash.【系统硬件提供两块物理设备】
1.1.2 mtd 分区相关命令格式举例
set sfcparts "mtdparts=nx_sfc:1024k@0k(uldr),1024k@1m(u-boot),1024k@2m(settings),-(sfcextra)"
这是一个串行flash的分区设置命令:
说明如下:【】为注解
set【设置命令】 sfcparts【设置sfc串行flash】 "mtdparts【分区定义】=nx_sfc【设备名称】:1024k【uldr大小】@0k(uldr)【uldr起始地址】,1024k【uboot大小】@1m(u-boot)【uboot起始地址】,1024k@2m(settings),-(sfcextra)"
1.1.3 设备使用分类:
setenv ldrflsh 'sfc'
setenv knlflsh 'nand'
setenv fssflsh 'nand'
1.2 实例
设置一个以串行flash为启动,用nandflash装载微码或者应用数据的例子
1.2.1 MTD settings
gcs sel NAND 【系统自动选择启动设备】
set sfcparts "mtdparts=nx_sfc:1024k@0k(uldr),1024k@1m(u-boot),1024k@2m(settings),-(sfcextra)" 【设置串行flash分区】
set nandparts "nx_2017:1024k@0k(unused1),1024k@1m(unused2),6m@2m(kernel),64m@8m(root),200m@72m(appfs),400m@272m(datac),1024k@672m(splash1),1024k@673m(splash2),-(extra)"【设置nand分区】
set mtdids "$sfcids,$nandids"
set mtdparts "$sfcparts;$nandparts"
1.2.2 mtd 这个分区通用命令是检查你分区分配适合合理的必用工具。
@ mtd
device sfc0 <nx_sfc>, # parts = 4
#: name size offset mask_flags
0: uldr 0x0000100000 0x0000000000 0 【系统硬件启动设置,这一般在uboot之前就应该装载】
1: u-boot 0x0000100000 0x0000100000 0
2: settings 0x0000100000 0x0000200000 0
3: sfcextra 0x0000500000 0x0000300000 0
device nand0 <nx_2017>, # parts = 9
#: name size offset mask_flags
0: unused1 0x0000100000 0x0000000000 0
1: unused2 0x0000100000 0x0000100000 0
2: kernel 0x0000600000 0x0000200000 0
3: root 0x0004000000 0x0000800000 0
4: appfs 0x000c800000 0x0004800000 0
5: datac 0x0019000000 0x0011000000 0
6: splash1 0x0000100000 0x002a000000 0
7: splash2 0x0000100000 0x002a100000 0
8: extra 0x0015e00000 0x002a200000 0
1.2.3 write to the sfc
@sfc erase u-boot
@tftp u-boot.bin
@sfc write u-boot
@sfc erase uldr
@tftp uldr.bin
@tftp uldr.bin.uartboot_img
@sfc write uldr
2 Uboot 的几种启动模式设置
2.1 flash 模式
2.2 NFS 模式 【假定已经建立tftp nfs samba模式】
setenv serverip 192.168.0.1
setenv ethaddr 00:06:37:03:15:01
setenv ipaddr 192.168.0.201
setenv ethport eth0
setenv gatewayip 192.168.0.1
setenv nfs_serverip "192.168.0.1"
@setenv rootfsargs "root=/dev/nfs rw nfsroot=${nfs_serverip}:/home/wine/nfs_serverfolder/rootfs_fd"
@setenv appfsargs "APPFS=${serverip}:/home/wine/nfs_serverfolder/apps_fd"
@setenv bootargs "noinitrd ip=${ipaddr}:${serverip}:192.168.0.1:255.255.255.0:${ethport} console=ttyS1,115200n8 ${mtdparts} ${rootfsargs} ${appfsargs}"
@setenv bootcmd "tftp linuxkernel.bin; go 0x8000";setenv uboot_cmdline 1;save;
2.3 USB 模式
2.4 混合模式
ref:
2