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

2014-11-24 09:53:59 · 作者: · 浏览: 0

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


相关阅读:


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,欣喜。