一、tftp加载Linux内核及rootfs
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加载内核和根文件系统
实验内容:
先把Linux内核、设备树、根文件系统放到tftp服务器上(即上次实验创建的根目录下的/tftpboot)。通过设置自启动环境变量,uboot进入自启动模式后。通过tftp,从ubuntu上把Linux内核、设备树、根文件系统加载到内存,然后运行。
实验步骤:
![](https://i-blog.csdnimg.cn/blog_migrate/4f301576662693159e172f944edc74ac.png)
$ sudo chmod 777 /tftpboot/*
$ sudo service tftpd-hpa restart
![](https://i-blog.csdnimg.cn/blog_migrate/8fd67447285143afa5fa50ad33dfd439.png)
# setenv ipaddr ***.***.***.***
# setenv serverip xxx.xxx.xxx.xxx
# setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000
# setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw