目录
1 tftp加载Linux内核及rootfs
1.1 uboot内核启动命令
1.2 uboot自启动参数环境变量
1.3 实验
2 EMMC加载Linux 内核及rootfs
编辑
2.1 emmc中写入uimage
编辑
2.2 emmc中写入dtb
2.3 emmc中写入根文件系统
2.4 设置环境变量
3 tftp加载Linux内核nfs挂载rootfs
3.1 复制rootfs压缩包到nfs服务器目录
3.2 设置环境变量
3.3 启动检测
4 最后EMMC加载boot
4.1 复制uboot到tftp服务器目录
4.2 写入emmc编辑
4.3 重新上电
5 练习
1 tftp加载Linux内核及rootfs
tftp即通过网络把远端服务器中的的linux内核、设备树、根文件系统辅助到内存中运行。
1.1 uboot内核启动命令
bootm
启动指定内存地址上的Linux内核并为内核传递参数
bootm kernel-addr ramdisk-addr dtb-addr
注:
kernel-addr: 内核的下载地址
ramdisk-addr: 根文件系统的下载地址
dtb-addr: 设备树的下载地址
若不使用相应的地址,对应的位置写“-”
eg:
bootm 0x41000000 - 0x42000000
1.2 uboot自启动参数环境变量
bootargs
eg:
setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs
rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***
注:
root 根文件系统类型(nfs)
nfsroot 网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)
rw 操作网络文件系统的权限(rw)
console 控制台(使用串口2,波特率115200)
init init进程的位置(/linuxrc)
ip linux启动后自身的IP(***.***.***.***)
1.3 实验
详细信息参考实验手册
步骤一:建立tftp服务器目录,/home/linux/tftpboot(具体如何搭建参考手册)
步骤二:修改uboot内核启动命令,保存环境变量
setenv ipaddr [本机ip]
setenv serverip ]tftp服务器ip]
setenv gatewayip [网关]
setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000
saveenv
步骤三:重启开发板
2 EMMC加载Linux 内核及rootfs
2.1 emmc中写入uimage
查看uimage大小,计算需要占用多少个扇区,我们从0x800开始,前面以后留个uboot。后面需要1708个扇区,所以给了2000个扇区存放。
2.2 emmc中写入dtb
直接从0x2800开始刷,主要比43大就行,实验中分了800
2.3 emmc中写入根文件系统
0x2800+0x800=0x3000,大小计算同上
2.4 设置环境变量
setenv bootcmd 'mmc read 0 0x41000000 0x800 0x2000\;mmc read 0 0x42000000 0x2800 0x800\;mmc read 0 0x43000000 0x3000 0x2000\;bootm 0x41000000 0x43000000 0x42000000'
saveenv
3 tftp加载Linux内核nfs挂载rootfs
这种方式,开发效率较高。
3.1 复制rootfs压缩包到nfs服务器目录
3.2 设置环境变量
3.3 启动检测
4 最后EMMC加载boot
系统脱离SD卡的启动方式
sd默认是第1块启动,第0块是分区表,但是emmc不一样,默认是第0块启动
4.1 复制uboot到tftp服务器目录
4.2 写入emmc
4.3 重新上电
5 练习
1.简述uboot中bootargs环境变量的功能?
1 bootargs 是一个环境变量,用于指定 Linux 内核启动时的参数。它是 U-Boot 启动 Linux 内核时传递给内核的第一个参数,也是内核启动时使用的命令行参数。U-Boot 在启动 Linux 内核前,将 bootargs 环境变量的值拼接成一个字符串,并传递给内核。这个字符串包含了启动内核所需的所有参数和信息,内核启动后会解析这个字符串并按照其中的参数和信息进行配置和初始化.它直接影响到内核启动后的配置和运行。