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

时间:2021-05-27 12:22:54

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

相关阅读:
 
移植Linux内核到s3c6410(配置内核make menuconfig) http://www.linuxidc.com/Linux/2011-08/40002.htm
 
移植Linux内核到s3c6410(编译内核make uImage)http://www.linuxidc.com/Linux/2011-08/40003.htm
 
移植Linux内核到s3c6410(使用busybox构建initrd ramdisk)  http://www.linuxidc.com/Linux/2011-08/40004.htm
 
U-Boot源代码下载地址   http://www.linuxidc.com/Linux/2011-07/38897.htm
 
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,欣喜。

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-08/40004.htm