移植Linux内核到s3c6410(使用busybox构建initrd ramdisk)


busybox就是linux的一个应用程序,就是讲一套非常使用的命令工具集成到一个busybox命令下,它不一定是最全的,但是是非常使用的,被大家称为嵌入式linux的“瑞士军刀”,其编译和配置方法跟linux内核非常相似,使用比较方便。

下载地址:http://www.busybox.net/

相关阅读:

移植Linux内核到s3c6410(配置内核make menuconfig)

移植Linux内核到s3c6410(编译内核make uImage)

移植Linux内核到s3c6410(使用busybox构建initrd ramdisk) 

U-Boot源代码下载地址  

busybox常用配置

make  defconfig 默认配置
allyesconfig 最大配置
allnoconfig 最小配置
menuconfig手动配置

我编译时先用deconfig默认配置,然后再使用menuconfig来手动修改一些配置:

1、把busybox编译成静态链接的可执行文件,运行时独立其他函数库,否则运行时就依赖其他库文件。单独有内核时无法运行。

busybox settings -> Build Options ->Build BusyBox as a static binary (no shared libs)

2、取消下面这个配置项目,否则make install时会将编译生成的命令覆盖当前系统/usr目录的命令,破坏宿主机的系统。 取消后make install时会生成一个-install目录,里面有bin和sbin目录,里面的命令已经默认链接到busybox了。

busybox settings -> Installation Options ->Don't use /usr

3、选这个选项后,可以将用户名字符串替换提示符。如 [root@localhost linux]# ,否则会显示为:PS1="[/u@/h /w]# " 。

busybox settings -> busybox library tuning -> username completion、fancy shell prompts

编译后执行make install就会再busybox根目录下生成一个_install目录,里面有bin和sbin目录,链接也已经OK。 

initrd有了上面那两个目录还不够,还得要一些必要的目录和文件,,如proc,var,dev下的console设备节点等,在busybox源码的根目录下有个examples目录,里面有创建这些目录和device inode等的一些脚本模板,可以帮助大家创建这些目录和文件。

我自己编写的模板是,最后的是个采用的是linux2.6内核支持的cpio格式:

#!/bin/bash
ROOTFSDIR=/tmp/linux/Rootfs
BUSYBOXSOURCE=/tmp/linux/busybox-1.17.4
TARTGET=/mnt/hgfs/cml

echo " start make rootfs......"
rm -fr $ROOTFSDIR/ramdisk.img
rm -fr $ROOTFSDIR/ramdisk.img.gz
rm -fr $ROOTFSDIR/rootfs
cd $ROOTFSDIR

echo "--------creat dir--------"
mkdir $ROOTFSDIR/rootfs
cd rootfs
mkdir dev etc lib proc tmp usr var sys
chmod 777 tmp
mkdir usr/lib
mkdir var/lib var/lock var/log var/run var/tmp
chmod 777 var/tmp

echo "--------copy busybox--------"
cp -a $BUSYBOXSOURCE/_install .
cp -a $BUSYBOXSOURCE/examples/bootfloppy/etc etc/

echo "-----make device inodes-----"
cd dev
mknod console c 5 1
mknod mem c 1 1
mknod null c 1 3

# ttys
mknod tty c 5 0
for i in `seq 0 9`; do
        mknod tty$i c 4 $i
done

echo "------cpio gzip-------"
cd ..
find .|cpio -c -o > ../ramdisk.img
gzip ../ramdisk.img

cp $ROOTFSDIR/ramdisk.img.gz $TARTGET

最后生成了我们需要的经过cpio和gzip处理过后的ramdisk.img.gz,欣喜。

相关内容