|
一、添加目录 使用mkdir分别建立lib、dev、proc、mnt、sys、tmp、root、usr/lib文件夹: elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir lib elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir dev elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir proc elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir mnt elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir sys elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir tmp elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir root elf@ubuntu:~/nfs_rootfs/rootfs$ mkdir usr/lib elf@ubuntu:~/nfs_rootfs/rootfs$ ls bin dev lib linuxrc mnt proc root sbin sys tmp usr 二、添加lib库内容 在rootfs目录中,使用如下命令,将交叉编译工具中的lib库复制到lib下: elf@ubuntu:~/nfs_rootfs/rootfs$ cp -d /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7\hf-neon-poky-linux-gnueabi/lib/*so* ./lib 然后继续以下操作,将lib中的ld-linux-armhf.so.3软连接,更改为实体。 删除软连接: elf@ubuntu:~/nfs_rootfs/rootfs$ rm lib/ld-linux-armhf.so.3 复制实体: elf@ubuntu:~/nfs_rootfs/rootfs$ cp /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-n\eon-poky-linux-gnueabi/lib/ld-linux-armhf.so.3 ./lib 三、添加usr/lib库内容 在rootfs目录中,使用如下命令,将交叉编译工具中的/usr/lib库复制到/usr/lib下: elf@ubuntu:~/nfs_rootfs/rootfs$ cp -rd /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7\hf-neon-poky-linux-gnueabi/usr/lib/*so* ./usr/lib 四、添加启动文件 在/busybox/examples/etc文件夹中存在有启动相关的文件,我们将该etc文件夹复制到我们创建的文件系统中: elf@ubuntu:~/nfs_rootfs/rootfs$ cp -rf /home/elf/work/busybox-1.32.1/examples/bootf\loppy/etc/ . 复制完成之后,我们打开etc目录: elf@ubuntu:~/nfs_rootfs/rootfs$ ls etc/ fstab init.d inittab profile 其中: inittab是一个存储有初始化配置的文本文件,它有若干行指令所组成,这些指令都按照一定的格式进行书写。内核在经过一系列初始化工作之后,执行的第一个用户进程是init进程,该进程执行程序是sbin/目录下的init程序。init程序会解析inittab文件,获取其中的配置信息,并按照其中配置创建各种子进程。 inittab文件中每个条目用来定义一个子进程,并确定它的启动方法,格式如下 : Identifier:run_level:action:process (一)Identifier:对于busybox来说,表示这个进程要使用的控制台(即标准输入、标准输出、标准错误设备)。如省略,则使用与init进程一样的控制台。 (二)run_level:系统运行级别,对于Busybox init程序,这个字段无意义,可以省略。 (三)action:表示init程序如何控制这个子进程。 action字段一般有如下定义: action定义 执行说明 sysinit 系统启动后最先执行的进程,init程序会等待它执行完成之后,才能执行下一进程 wait Sysinit进程执行结束后执行的第二个进程,init程序会等待它执行完成之后,才能执行下一进程 once Wait进程执行结束后,执行的进程,init程序会等待它执行完成之后,才能执行下一进程 respawn Once进程结束之后,init进程监测发现子进程退出时,重新启动子程序 askfirst 与respawn类似,也是在Once进程结束之后,init进程监测发现子进程退出时,重新启动子程序,不过init进程先输出“Please press Enter to actvie this console”,等用户输入回车键之后才启动子进程 shutdown 重启关闭系统命令时halt/reboot/poweroff/SIGQUIT启动子进程 restart 重启时执行子进程 ctrlatldel 按下Ctr+Alt+del组合键时执行子进程 (四):要执行的程序,它可以是可执行程序,也可以是脚本 五、修改inittab文件 我们可以打开etc/inittab文件,详细看一下: ::sysinit:/etc/init.d/rcs ::respawn:-/bin/sh tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r ::sysinit:/etc/init.d/rcS表示系统启动后会首先运行etc/init.d/rcS文件,该文件是一个脚本文件,在此脚本文件中,我们可以执行一系列初始化操作,比如设置环境变量路径,开启程序,挂载文件系统、配置网络等等。 ::respawn:-/bin/sh表示当子进程-/bin/sh退出之后,重新开启。 tty2::askfirst:-/bin/sh表示-/bin/sh交互使用的控制台是tty2,子进程有"-"字符,表示这个程序是可交互的。 ::ctrlaltdel:/sbin/unmount -a –r按下组合键后卸载文件系统。 我们将inittab文件进行按照我们想要的功能进行简单修改: ttymxc0::sysinit:/etc/init.d/rcS ttymxc0::askfirst:-/bin/sh ::restart:/sbin/init ::crtlaltdel:/sbin/reboot ::shutdown:/sbin/unmount -a -r ::shutdown:/sbin/swaoff -a 然后我们打开init.d/rcS文件: #! /bin/sh
/bin/mount -a 该脚本文件只有一行命令,我们进行简单修改,增加mdev系统功能,mdev系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件: #! /bin/sh mount -a echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s #./usr/my_app mount –a命令用于挂载文件系统,挂载所有的应该被挂载的文件系统,在busybox中mount -a时busybox会去查找etc/fstab文件系统列表文件,这个文件按照一定的格式列出来所有应该被挂载的文件系统。 接下来的两行命令,是mdev系统功能,mdev系统启动和热插拔 或动态加载驱动程序时,自动创建设备节点。 最后的./usr/my_app是我添加的一个测试程序,系统启动之后,会自动执行该程序,这里先注释掉。 刚才说执行mount –a命令时,busybox会去查找etc/fstab文件系统列表文件,我们打开etc/fstab文件: proc /proc proc defaults 0 0 可以看到这里只列出一个proc文件系统,我们继续在此文件中添加: proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 最后,在etc目录下还有一个profile文件,增加关于应用程序、库文件的路径环境变量配置: PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib export PATH LD_LIBRARY_PATH
|