900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 007-BSP学习笔记-手动构建rootfs(busybox)构建

007-BSP学习笔记-手动构建rootfs(busybox)构建

时间:2023-07-13 12:26:19

相关推荐

007-BSP学习笔记-手动构建rootfs(busybox)构建

目录

一、下载编译busybox二、 向根文件系统添加 lib 库1、将交叉编译器中的库文件拷贝到rootfs/lib目录下2、将交叉编译器中的库文件拷贝到rootfs/usr/lib目录下3、创建其他文件夹 三、rootfs测试1、nfs挂载测试 四、完善rootfs1、创建/etc/init.d/rcS2、创建/etc/fstab 文件3、创建/etc/inittab 文件

一、下载编译busybox

//配置忽略

//修改环境变量支持交叉编译器

make

make install CONFIG_PREFIX=/home/nfs/rootfs

Linux 内核 init 进程最后会查找用户空间的 init 程序,找到以后就会运行这个用户空间的 init 程序,从而切换到用户态。如果 bootargs 设置 init=/linuxrc,那么 linuxrc 就是可以作为用户空间的 init 程序,所以用户态空间的 init 程序是 busybox 来生成的.

二、 向根文件系统添加 lib 库

1、将交叉编译器中的库文件拷贝到rootfs/lib目录下

mkdir libcd */gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linuxgnueabihf/libc/libcp *so* *.a ~/home/nfs/rootfs/lib/ -dcd */gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libcp *so* *.a ~/home/nfs/rootfs/lib/ -d

2、将交叉编译器中的库文件拷贝到rootfs/usr/lib目录下

cd */gcc-linaro-4.9.4-.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/libcp *so* *.a ~/home/nfs/rootfs/usr/lib/ -d

cd rootfs //进入根文件系统目录du ./lib ./usr/lib/ -sh //查看 lib 和 usr/lib 这两个目录的大小

3、创建其他文件夹

在根文件系统中创建其他文件夹,如 dev、 proc、 mnt、 sys、 tmp 和 root 等

三、rootfs测试

1、nfs挂载测试

修改uboot 里面的 bootargs 环境变量会设置“root”的值

root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>

<server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP地址,比如我的 Ubuntu 主机 IP 地址为 192.168.1.250。

<root-dir>: 根文件系统的存放路径,比如我的就是/home/zuozhongkai/linux/nfs/rootfs。

<nfs-options>: NFS 的其他可选选项,一般不设置。

<client-ip>: 客户端 IP 地址,也就是我们开发板的 IP 地址, Linux 内核启动以后就会使用此 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,并且没有被其他的设备使用,在 Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址,比如我就可以设置为192.168.1.251。

<server-ip>: 服务器 IP 地址,前面已经说了。

<gw-ip>: 网关地址,我的就是 192.168.1.1。

<netmask>:子网掩码,我的就是 255.255.255.0。

<hostname>:客户机的名字,一般不设置,此值可以空着。

<device>: 设备名,也就是网卡名,一般是 eth0, eth1….,正点原子的 I.MX6U-ALPHA 开发板的 ENET2 为 eth0, ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。这里我们使用 ENET2,所以网卡名就是 eth0。

<autoconf>: 自动配置,一般不使用,所以设置为 off。

<dns0-ip>: DNS0 服务器 IP 地址,不使用。

<dns1-ip>: DNS1 服务器 IP 地址,不使用。

例:

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:/home/zuozhongkai/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off' //设置 bootargssaveenv //保存环境变量boot //启动内核

四、完善rootfs

1、创建/etc/init.d/rcS

1 #!/bin/sh2 3 PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH4 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib5 export PATH LD_LIBRARY_PATH6 7 mount -a //使用 mount 命令来挂载所有的文件系统,这些文件系统由文件/etc/fstab 来指定,所以一会还要创建/etc/fstab 文件。8 mkdir /dev/pts9 mount -t devpts devpts /dev/pts1011 echo /sbin/mdev > /proc/sys/kernel/hotplug //使用 mdev 来管理热插拔设备,通过这两行, Linux 内核就可以在/dev 目录下自动创建设备节点。关于 mdev 的详细内容可以参考 busybox 中的 docs/mdev.txt文档。12 mdev -s

2、创建/etc/fstab 文件

1 #<file system> <mount point> <type> <options> <dump> <pass>2 proc /proc proc defaults 0 03 tmpfs /tmp tmpfs defaults 0 04 sysfs /sys sysfs defaults 0 0

<file system>:要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等等。

<mount point>:挂载点。

<type>:文件系统类型,比如 ext2、 ext3、 proc、 romfs、 tmpfs 等等。

<options>:挂载选项,在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults,也就是默认选项, defaults 包含了 rw、 suid、 dev、 exec、 auto、 nouser 和 async。

<dump>:为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0。

<pass>:磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0。

3、创建/etc/inittab 文件

inittab 的详细内容可以参考 busybox 下的文件 examples/inittab

1 #<id>:<runlevels>:<action>:<process>2 ::sysinit:/etc/init.d/rcS3 console::askfirst:-/bin/sh4 ::restart:/sbin/init5 ::ctrlaltdel:/sbin/reboot6 ::shutdown:/bin/umount -a -r7 ::shutdown:/sbin/swapoff -a

<id>:每个指令的标识符,不能重复。但是对于 busybox 的 init 来说, <id>有着特殊意义。对于 busybox 而言<id>用来指定启动进程的控制 tty,一般我们将串口或者 LCD 屏幕设置为控制 tty。

<action>:动作,用于指定<process>可能用到的动作。 busybox 支持的动作如表 38.4.3.1 所示:

<process>: 具体的动作,比如程序、脚本或命令等。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。