嵌入式linux软件平台--根文件系统rootfs构建

2019-07-12 14:41发布

TI提供了参考的rootfs,但由于在实际产品中受到存储空间的限制,以及产品应用的实现要求,需要重新搭建rootfs。
rootfs的搭建通过使用开源软件busybox实现。 Busybox
RootFs使用Busybox进行搭建,关于Busybox的功能及使用请查看相关文档,这里简单介绍Busybox的编译流程.
  1. 下载最新的Busybox版本Busybox-1.22.1
  2. 解压后进入目录,运行make menuconfig
  3. 设置Cross Compiler prefix为arm-linux-gnueabihf-
  4. 设置Don't use /usr
  5. 保存配置退出
  6. make && make install
Rootfs目录
使用busybox编译生成的文件,搭建Rootfs目录,流程如下:
  • 创建rootfs文件夹
mkdir rootfs cd rootfs
  • 创建creat_rootfs.sh文件并执行,完成Rootfs目录结构的创建.
#!/bin/sh #root dir mkdir bin sbin lib etc dev sys proc tmp var opt mnt usr home root media #usr sub dir cd usr mkdir bin sbin lib local #usr/local sub dir cd local mkdir bin sbin lib cd ../.. #etc sub dir cd etc touch inittab touch fstab touch profile touch passwd touch group touch shadow touch resolv.conf touch mdev.conf touch inetd.conf mkdir rc.d mkdir init.d touch init.d/rcS chmod +x init.d/rcS mkdir sysconfig touch sysconfig/HOSTNAME cd .. #dev sub dir cd dev mknod console c 5 1 chmod 777 console mknod null c 1 3 chmod 777 null cd .. #var sub dir cd var mkdir log cd ..
  • 复制busybox编译生成的文件到rootfs下对应目录
  • 使用arm-linux-gnueabihf-readelf –d查看busybox及qtlib文件依赖的库文件
  • 从arm-linux-gnueabihf工具链的库文件中复制需要的内容到rootfs/lib
  • 使用arm-linux-gnueabihf-strip对lib下的库文件进行压缩
  • 编辑/etc/inittab文件
::sysinit:/etc/init.d/rcS ::respawn:-/bin/login
  • 编辑/etc/fstab文件
none /dev/pts devpts mode=0622 0 0 tmpfs /dev/shm tmpfs defaults 0 0
  • 编辑/etc/group文件
root:x:0:root
  • 编辑/etc/passwd文件
root:x:0:0:root:/root:/bin/sh
  • 编辑/etc/profile文件
PATH=/bin:/sbin:/usr/bin:/usr/sbin export LD_LIBRARY_PATH=/lib:/usr/lib USER="`id -un`" LOGNAME=$USER PS1='[u@h W]# '
  • 编辑/etc/init.d/rcS文件
#! /bin/sh /bin/mount -n -t ramfs ramfs /var /bin/mount -n -t ramfs ramfs /tmp /bin/mount -n -t sysfs none /sys /bin/mount -n -t ramfs none /dev /bin/mkdir /var/tmp /bin/mkdir /var/modules /bin/mkdir /var/run /bin/mkdir /var/log /bin/mkdir -p /dev/pts /bin/mkdir -p /dev/shm echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s /bin/mount –a