参考博客http://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html
一、构建根文件系统该有的目录
- 即在/rootfs/目录下创建该有的空目录;
- 一般有dev/ etc/ lib/ usr/ var/ proc/ tmp/ home/ root/ mnt/ bin/ sbin/ sys/ ;
- /bin /sbin由于是用busybox构建,再拷贝到此目录下的,所以可以先不创建;
二、使用busybox构建/bin /sbin linuxrc
1、获取busybox源码
- busybox是开源项目,版本差异不大;这里选择busybox-1.24.1版本。
- 官方网站下载:https://busybox.net/downloads/
2、解压后修改Makefile
- ARCH = arm
- CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-
3、配置busybox
- 先make defconfig,然后make menuconfig,安装下面图示进行配置。
p.s:出现错误
解决思路方法:此文件和主功能无关,可以避开。
(1)先找到sync.c文件:在此目录下find -name "sync.c",知道其在./coreutils/sync.c
(2)cd coreutils,在Kbuild文件中,查找sync.o,可知由宏CONFIG_SYNC来控制是否编译
(3)在make menuconfig中,查找SYNC的位置,转到其位置,选择为N。
4、输入make进行编译,然后输入make install进行安装
(1)make install,执行busybox顶层目录的一个目标install。
(2)安装目录默认在busybox/_install,里面有bin/ sbin/ linuxrc三个(目录)文件。
- 也可以指定目录安装,以便后期不用再拷贝。
(3)make install的解释
- 安装软件的指令,在传统的linux系统中,安装软件时都是选择源代码方式安装的。
- 下载要安装的软件源代码,然后配置、编译、安装。
- 安装的含义是,将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定的目录下。
5、将bin/ sbin/ linuxrc拷贝到rootfs文件夹下
- 指令是cp bin/ sbin/ linuxrc /root/rootfs -ra;
三、构建etc目录
主要是拷贝一些文件到etc/目录下,并进行一些修改
1、将 busybox/examples/bootfloopy/etc/* 拷贝到 /rootfs/etc/ 目录下,然后修改其中的inittab文件;
(1)开机免登陆,直接进入shell
- #first:run the system script file
- ::sysinit:/etc/init.d/rcS
- ::askfirst:-/bin/sh
- ::ctrlaltdel:-/sbin/reboot
- #umount all filesystem
- ::shutdown:/bin/umount -a -r
- #restart init process
- ::restart:/sbin/init
或者
- ::sysinit:/etc/init.d/rcS
- #::respawn:-/bin/sh
- #::respawn:-/bin/login
- console::askfirst:-/bin/sh //这个和上面一样,只是id明确给出而已
- #tty2::askfirst:-/bin/sh
- ::ctrlaltdel:/bin/umount -a -r
(2)开机需要登陆
- ::sysinit:/etc/init.d/rcS
- #::respawn:-/bin/sh
- ::respawn:-/bin/login
- #console::askfirst:-/bin/sh
- #tty2::askfirst:-/bin/sh
- ::ctrlaltdel:/bin/umount -a -r
2、用户名、密码设置:将虚拟机ubuntu的 /etc/passwd、/etc/group、/etc/shadow 拷贝到 rootfs/etc/ 目录下,然后修改三个文件的相关内容;
(1)只保存与root相关项,修改passwd为root:x:0:0:root:/root:/bin/sh。
(2)只保存与root相关项,修改group为root:x:0:root。
(3)只保存与root相关项,shadow其他不需要更改(或者清除密码),登陆密码和拷贝源的密码一致。
3、修改profile文件;
- # Ash profile
- # vim: syntax=sh
- # No core files by default
- ulimit -S -c 0 > /dev/null 2>&1
- USER="`id -un`"
- LOGNAME=$USER
- PS1='[\[email protected]\h \W]\# '
- PATH=$PATH
- HOSTNAME=`/bin/hostname`
- export USER LOGNAME PS1 PATH
4、修改fstab文件;
添加以下内容:注意这里的挂载点需要预先建立(如果在第一步创建空目录是没有创建的话)
- #<file system> <mount point> <type> <options> <dump> <pass>
- proc /proc proc defaults 0 0
- sysfs /sys sysfs defaults 0 0
- tmpfs /var tmpfs defaults 0 0
- tmpfs /tmp tmpfs defaults 0 0
- tmpfs /dev tmpfs defaults 0 0
5、修改etc/init.d/rc.S文件;
- #!/bin/sh
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- runlevel=S
- prevlevel=N
- umask 022
- export PATH runlevel prevlevel
- mount -a
- echo /sbin/mdev > /proc/sys/kernel/hotplug
- mdev -s
- /bin/hostname -F /etc/sysconfig/HOSTNAME
- ifconfig eth0 192.168.1.10
四、构建lib目录
将动态链接库拷贝到/root/rootfs/lib/目录下,动态链接库在 /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/ 目录下。
- 指令 cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/*so* /root/rootfs/lib/ -rdf