1 建一个目录rootfs 用来装文件系统
2 # mkdir bin dev etc home lib mnt proc root sbin tmp usr var
# mkdir usr/bin usr/sbin
# mkdir mnt tmp var
# chmod 1777 tmp
# mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
# mkdir var/lib var/lock var/log var/run var/tmp
# chmod 1777 var/tmp
# mkdir home root boot
3 到系统 /dev 把所有的device 打一个包,拷贝到 dev 下面(最省事的做法);或者使用mknod 来自己建所需要的device,
举例:
# mknod -m 600 dev/console c 5 1
# mknod -m 666 dev/null c 1 3
4 应用程序定制
标准的Linux 发行版本具有功能种类比较多的应用程序,这些应用程序占用的空间也很大,这对存储容量空间有限的开发板来说就不是理想的选择,在嵌入式开发过程中,经常用BusyBox 来定制应用程序。BusyBox 具有shell 的功能,它能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、压缩解压缩工具、查找工具、帐号密码管理工具和进程相关工具等。
目前BusyBox 的最新版本是BusyBox-1.9.2 版本,下载解压,切换到BusyBox 的
根目录下,修改Makefile, 找到ARCH 和CROSS COMPILE 修改如下:
ARCH ?= arm
CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-
5 修改编译配置选项。
#make defconfig
#make menuconfig
在默认的选项前提之下,选项设置如下:
BusyBox Settings --->
Build Options ---> ( 采用静态编译)
[*] Build BusyBox as a static binary (no shared libs)
Install optin-->
[*] Don't use /usr // 可以不选,选了则没有/usr 文件夹
Busybox Library Tuning --->
(2) MD5: Trade Bytes for Speed
[*] Faster /proc scanning code (+100 bytes)
[*] Support for /etc/networks
[*] Support for /etc/networks
[*] Additional editing keys
[*] vi-style line editing commands
[*] History saving
[*] Tab completion
[*] Username completion
[*] Fancy shell prompts
Linux Module Utilities --->
[ ] Support version 2.2.x to 2.4.x Linux kernels // 不能选
[*] Support version 2.6.x Linux kernels
Linux System Utilities --->
[*] Support for the old /etc/mtab file // 不确定
Miscellaneous Utilities --->
[*] devfs(obsolete) // 不确定
[*] Use devfs names for all device(obsolete) // 不确定
Shell --->
Choose your default shell(ash)-->
---ash // 下面的选项全部选择
6 编译busybox
make install
在busybox/_install 目录下会生成我们需要的文件。
修改_install/bin/busybox 的属性。为4755
chmod 4755 ./_install/bin/busybox
必须要修改属性,否则在busybox 中很多命令会受限
将编译好的busybox 拷贝到/bin 下面。拷贝时带上参数-arf 或者-dpR 。
除了busybox 外,所有其他的命令都是他的link
/sbin 下面也是busybox 的link,
/usr/bin 下面也是busybox 的link,
/usr/sbin 下面放着所有编译完的可执行文件,具体就不多说了
7 非常重要之/lib ,务必重视
/lib 的库其实就是进行busybox 编译的库,即交叉编译器的库,我们这里使用的是3.4.1 ( 位置 /usr/local/arm/3.4.1) 。
# cd /usr/local/arm/3.4.1/arm-linux/lib
# for file in libc libcrypt libdl libm libpthread libresolv libutil
> do
> cp $file-*.so rootfs/lib ( 复制到你做的文件系统的 /lib 目录下 )
> cp -d $file.so.[*0-9] rootfs/lib
> done
# cp -d ld*.so* rootfs/lib
8 系统配置文件的建立
系统配置文件放在/etc 目录下
(1)profile 文件
#Set search library path
export LD_LIBRARY_PATH =/lib:/usr/lib:$LD_LIBRARY_PATH
#Set user path
PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
alias ll='ls -l'
#Set PS1
USER=”`id –un`”
LOGNAME=$USER
PS1=’[/u@/h /W]/$ ’
PATH=$PATH
export USER LOGNAME PS1 PATH
(2)fstab 文件
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
(3)inittab 文件
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
(4) 创建/etc/init.d 文件夹和rcS ,在rcS 中添加
#! /bin/sh
# 设置主机名,需要在etc 建立文件host
./etc/host
hostname ${HOSTNAME}
# mount all filesystem defined in “fstab”
echo "# mount all..........."
/bin/mount -a
echo "# Starting mdev........."
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev –s
(5)host 文件
HOSTNAME=Hasotech
(6) 创建mdev.conf 文件 (空文件)
(7) 复制主机/etc/ 下面的文件passwd, group, shadow 文件到/etc
# cp /etc/group .
# cp /etc/passwd .
# cp /etc/shadow .
修改passwd 中用户使用的shell 名称。FC6 上默认的为bash, 而vivi 只支持ash 。
root:x:0:0:root:/root:/bin/bash -->
root:x:0:0:root:/root:/bin/ash
(8) 修改各文件和文件夹的权限
# chmod 755 /rootfs/etc/init.d/rcS
# chmod 755 /rootfs/etc/host
9 yaffs 文件系统映像的制作
使用mkyaffsimg 程序可以把一个目录做成一个yaffs 映像文件,然后使用usb 下载到
板子上。进入文件系统目录层,使用以下命令。
#mkyaffsimg rootfs rootfs.img
这样就会在该目录下生成rootfs.img 映像文件,下载到开发板运行即可。
10 cramfs 文件系统映像的制作(cramfs 压缩率比较高)
在FTP 中下载cramfs-1.1.tar.gz ,解压到自己设定的目录下, 如:
tar xzvf cramfs-1.1.tar.gz – C /home/
进入生成有mkcramfs 文件的目录下(一定要进入此目录,否则会提示找不到该命令)
输入命令:#./mkcramfs / rootfs rootfs.cramfs
在当前目录下即生成rootfs.cramfs 映像文件。到此Linux 操作系统移植完毕。