没有合适的资源?快使用搜索试试~ 我知道了~
uboot 启动远程 Kernel(TFTP)以及挂载远程 ROOTFS(NFS)
需积分: 34 23 下载量 52 浏览量
2016-06-29
09:24:54
上传
评论 1
收藏 40KB DOCX 举报
温馨提示
试读
19页
uboot启动远程 Kernel(TFTP)以及挂载远程 ROOTFS(NFS)教程,简单有效
资源推荐
资源详情
资源评论
平台下
利用 启动远程 以及挂载远程
0. 准备工作
1. 编译 uboot
2. 将 uboot 写入 SD 卡
3. 编译 kernel,设置其可以通过 NFS 挂载根文件系统
4. 开发环境安装 TFTP 服务器
5. 开发环境安装 NFS 服务器
6. 目标环境设置 uboot 参数
7. 制作根文件系统(optional)。
8. 完整的启动 LOG。
!!!!有几位网友发信问我 uboot 挂载文件系统的方法,其实这个部分也不是我原创的,大部
分都是参考其他网友的方法,现在将我的手顺记录下来,希望对大家有所帮助。
!!!!整体思路大概是这样:
!!!!* 将 uboot 烧写到 SD 卡。
!!!!* 从 SD 卡启动系统,SD 卡中的 uboot 通过 TFTP 协议将远程的的 Kernel 下载到内存中。
!!!!* uboot 将内核参数设定为 ROOT 分区为远程的 NFS-SERVER 共享的一个目录,并
JUMP 到内核的 START ADDRESS。
!!!!* kernel 自解压,并 JUMP 到解压后的新的内核 START ADDRESS,内核正常启动。
!!!!* 最后通过内核通过 uboot 设置的 ROOTFS 参数得知根文件系统在远程,并通过 NFS
挂载 ROOTFS。
!!!!* 根文件系统挂载完了以后,就会去执行 init 程序, init 程序被 uboot 指定为 /linuxrc。
!!!!我的开发环境是 ubunto 12.04LTS。
!!!!目标系统的内核是 3.0.8 ,源代码位于 /opt/S5PV210/rootfs/usr/src/linux-3.0.8。
!!!!uboot 的源代码位于 /opt/S5PV210/rootfs/usr/src/opencsbc-u-boot。
!!!!目标环境的根文件系统位于 /opt/S5PV210/rootfs。
!!!!交叉编译器位于 /opt/linaro-gcc473-eglibc216-armv7a-neon。
0. 准备工作
!!!!编译 uboot 和 linux 内核都需要使用到交叉编译器,所以需要确保 shell 的 PATH 环境中
包含了你的交叉编译器的路径。
!!!!比如我的 PATH 为:(通过 export 查看)
!!!!declare -x PATH="/usr/lib/lightdm/lightdm:/opt/linaro-gcc473-eglibc216-armv7a-neon/
bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
!!!!这样,就可以直接查找到 arm-linux-gcc 这条命令了,不许要输入 arm-linux-gcc 的绝对
路径。
1. 编译 uboot
!!!!uboot 来自于 kasim 修改的 uboot,原帖在 http://www.arm9home.net/read.php?tid-
16001.html。
!!!!可以通过 https://gitorious.org/opencsbc/u-boot/trees/mini210_linaro-2012.11-stable 右
边的 download mini210_linaro-2012.11-stable as tar.gz 这个按钮获取到打包的源代码。
!!!!将源代码下载下来以后,解压到某一个目录,我机器上是位于
/opt/S5PV210/rootfs/usr/src/opencsbc-u-boot 这个目录。进入到这个目录。
!!!!首先配置 uboot 是针对 tiny210 环境的。 tiny210v2 也是使用的这个配置项:
复制代码
!"#$% #&#'()*% +,+&-./
!!!!然后才是真正的编译 uboot:
复制代码
!"#$% #&#'()*% +,+ 01
!!!!编译完成以后,就可以看到 uboot 的二进制文件 spl/tiny210-spl.bin 和 uboot.bin。
!!!!另外还有一个用于制作 uImage 的工具 tool/mkimage。为了方便,把这个文件拷贝到
/usr/bin:
复制代码
02-13! /3033
2. 将 uboot 写入 SD 卡
!!!!注意,这部需要特别留心,别因为误写入,把你的硬盘给弄坏了。
!!!!注意,SD 卡的内容最好备份好。
!!!!将 SD 卡放到读卡器里面,并将 SD 卡读卡器接入开发环境,在我的环境中, SD 卡会
被识别为 /dev/sdc。
!!!!通过下面的命令将 uboot 写入 SD 卡,保证这个 SD 卡可以启动。
复制代码
02224 /%20-4 /%20-5%013+015%32302-0!%
02224 /%20-4 /%20-5%+5%32302-0!%67
!!!!如果怕写入不同步,可以再执行一下 sync 这个命令,保证 cache 都写入到磁盘中。
!!!!到此为止,就可以通过 SD 卡启动 uboot 了。
3. 编译 kernel,设置其可以通过 NFS 挂载根文件系统
!!!!光盘中带的内核,默认不支持从 NFS 挂载 ROOTFS。需要重新配置并编译内核。
!!!!在/opt/S5PV210/rootfs/usr/src/linux-3.0.8 目录下,通过 make menuconfig 启动
ncurses 图形配置界面。
!!!!下面几个个内核配置项,必须选中。
复制代码
89!/011+:9!/10+:(! -./
!!!!!!!!注意,这个选项下面的 IP:DHCP support / IP:BOOTP support / IP:RARP aupport 不
能选。
!!!!!!!!因为我的开发环境中没有安装 DHCP server。开发板的 IP 是在内核启动参数中指定
的。
复制代码
8000+:9!0+:-011
8000+:9!0+:-01150;或
者 6
; 8000+:9!0+:.00
!!!!
!!!!将退出配置,并保存。
!!!!执行下面的命令生成 uImage 内核镜像文件,这个过程其实是先生成了 zImage ,然后
调用了刚才 uboot 的那个 mkimage 生成 uImage。
复制代码
!( /
!!!!下面的 LOG 表明 uImage 生成了,位于 arch/arm/boot/uImage。
复制代码
#$-23,30<
#$-23/ 230 0<
; !=>?-23/ 23 -<+10<@012
6 #"))0-103-<-!00- 00<
#$-23/ 23-1<
A -<3 33( /0 2
B $(*C -<3 33-100235-0
D " -<3 33-100235-0
7 )C -<3 33-10023,
EF#G -<3 33H( /
-<3 33H( /0 2
I('"J* -<3 33( /
; ( / ),+;D+(GK
6 # 2L2F ;A;
( /1"'),( /-1002
A C H;DBE0%;6B;!E%;;7'E
B ) 2"2200D
D *D
7 ( / -<3 33( /0 2
!!!!编译内核的时候,如果你使用的是 4.6 以后的 gcc,需要在 Makefile 中添加 -mno-
unaligned-access 给 KBUILD_CFLAGS 防止内核解压完以后启动不了。
复制代码
;ABEI()C&#)"J%+L +L25+L0-+110+L+/ 1<0M
;AD+5+0-+ 0/+5+-M
; ;A7+L+1-+5-+2- M
6 ;B+L+5 +0-M
;B+5+2++1+-<-!0M
A ;B++ /2+ --00
!!!!如果你生成的内核有问题,可以试一试我的内核配置文件 my_config。
4. 开发环境安装 TFTP 服务器
!!!!接下来,就是要在开发环境上安装 TFTP 服务器,使开发板可以通过 TFTP 协议下载
uImage 这个文件。
!!!!在 ubuntu 下,可以通过下面的命令安装 TFTP 服务器,这个服务是通过 inet 监听的。
复制代码
02 1+/0 512102+2
剩余18页未读,继续阅读
资源评论
CharyPro
- 粉丝: 22
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功