linux + busybox编译以及在qemu中运行

来源:互联网 发布:艾科特餐饮软件 编辑:程序博客网 时间:2024/06/06 00:28

转自我自己的人人

linux内核至少有两种方式编译运行。一种是在一个linux系统上编译完成得到二进制文件以后,把原来的linux内核(也就是刚刚用来编译新内核的系统)直接替换,运行。这样可能出现一个问题:如果新的内核有bug导致奔溃,也许就很难再把内核文件改回原来的版本了,不得不重装。另外一种就是本文的思路:在虚拟机中运行新的linux内核,不必修改原来的linux系统,避免对原来系统的大手术。

(背景知识,只想知道安装过程可跳过此段)有同学可能会问busybox是什么东西,为什么会多出一个东西需要编译?大家可能见过一个名字叫GNU/Linux,为什么linux前面加一个GNU呢?因为linux只是一个光杆司令内核,他并没有提供和用户交互的UI,也就是说没有鼠标、窗口、按钮,甚至没有命令行界面。在 GNU/Linux 系统中,Linux 就是内核组件。而该系统的其余部分主要是由 GNU 工程编写和提供的程序组成。"因为单独的 Linux 内核并不能成为一个可以正常工作的操作系统,所以我们更倾向使用 “GNU/Linux” 一词来表达人们通常所说的 “Linux”"。大家使用的Ubuntu等发行版是在GNU/Linux的基础上加入各种UI和功能。还是没说到busybox是什么。。。。其实他就是linux上的一个命令行界面外加各种附加工具的工具包。有了它我们才能在新编译的linux上输入命令,进行交互。

 

好了,开始编译吧。以下步骤在linux环境下完成

在www.kernel.org   下载一个linux源码包,我下载的是3.17版本

安装配置工具,命令行:sudo apt-get install libncurses5-dev

安装qemu虚拟机:sudo apt-get install qemu

cd (源码包所在的目录)

tar xf ./linux-3.17.tar.bz2

cd linux-3.17

make menuconfig

这时会弹出一个花花绿绿的菜单,这是各种linux的编译选项。为了提高编译速度,我们可以把network,usb相关的程序选择不编译,也可以试一下不编译哪些模块linux还能运行。或者保险起见什么也不动,直接exit,保存。

 

接下来命令行make

…….

linux漫长的编译,我花了45分钟

 

 

然后是busybox的编译

http://www.busybox.net/ 下载busybox, 我下载的是busybox-1.22.0

命令行:

cd (源码包所在的目录)

tar xv busybox-1.22.0.tar.bz2
    cd busybox-1.22.0/
   make menuconfig
    这里要注意了,在 Busybox Settings  --->   Build Options  --->的

               [*] Build BusyBox as a static binary (no shared libs)        这个选项必须要选上(让他前面有个*号)

    然后exit保存

然后命令行

make install

 

注意下文件存放的位置,把linux-3.17和busybox-1.22.0两个文件夹放在同一个文件夹里(比如我放在了/home/menooker)

以/home/menooker文件夹为例,在/home/menooker新建一个文本文件,命名makefs.sh。文件管理器中右键之,属性,权限,允许作为执行文件。右键文件,编辑,在文本编辑器输入

#!/bin/sh

 KERNEL=$(pwd)

BUSYBOX=$(find busybox* -maxdepth 0)

LINUX=$(find linux* -maxdepth 0)

 

#create filesystem

cd $BUSYBOX

mkdir -pv proc sys dev etc etc/init.d

cat << EOF > etc/init.d/rcS

#!/bin/sh

#mount -t proc none /proc

#mount -t sysfs none /sys

#/sbin/mdev -s

/sbin/umount -a

/sbin/mount -a

/sbin/mount -t ext3 remount rw /

EOF

 

chmod 777 ./etc/init.d/rcS

cd -

mkfs.ext3 -m0 /dev/ram1

mkdir /mnt/ram

mount /dev/ram1 /mnt/ram

cp $BUSYBOX/* /mnt/ram -r

cp $BUSYBOX/_install/* /mnt/ram -r

sleep 1

umount /dev/ram1

dd if=/dev/ram1 of=rootfs.img

#create zip img

cd $KERNEL

gzip -c rootfs.img > rootfs.img.gz

 

这个文件可以生成虚拟机需要的rom,把busybox包含在其中。

 

回到命令行,

cd /home/menooker

sudo ./makefs.sh

应该可以在/home/menooker里看到rootfs.img这个文件

最后就是运行了,命令:qemu-system-i386 -kernel ./linux-3.17/arch/i386/boot/bzImage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=sbin/init noapic"

 

等待其boot,如果成功运行在最后可以看到以下界面

 

这个就是新内核的虚拟机,接下来你可以输入各种命令调戏它了

 

p.s. 我是在ubuntu的VMWare虚拟机中作以上尝试的,虚拟机中跑qemu虚拟机貌似也没啥问题

p.s. 本文是我根据自己安装过程的记忆写的,难免出现疏漏,仅作参考


感谢网上大神们分享的关于linux编译,image制作,qemu的相关经验,本文参考了

http://os.51cto.com/art/200709/55139.htm

http://blog.chinaunix.net/uid-26009923-id-3825761.html

http://blog.csdn.net/jiahaojie1984/article/details/3498146

http://mzqthu.iteye.com/blog/2001167

 


0 0
原创粉丝点击