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
- linux + busybox编译以及在qemu中运行
- 编译linux3内核,与busybox,用qemu模拟运行
- 在qemu中运行magenta
- OP-TEE 在QEMU以及FVP平台上的编译、运行与测试
- qemu busybox模拟Linux启动
- linux 3.10 busybox initramfs构建 qemu调试
- xv6 + Qemu 在Ubuntu下编译运行教程
- xv6 + Qemu 在Ubuntu下编译运行教程
- 编译可在Android上运行的qemu user mode
- 编译可在Android上运行的qemu user mode
- xv6 + Qemu 在Ubuntu下编译运行教程
- 初识optee 在QEMU平台上的编译、运行
- linux 怎么编译busybox
- Qemu运行linux 4.9
- 在Linux下为嵌入式Linux内核编译busybox
- qemu中运行图形界面
- qemu编译运行的问题
- 在Linux下运行Qemu模拟AArch64硬件调试内核
- MYSQL卸载
- linux spi子系统
- 进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度_Java语言模拟实现
- HDU_4115_Eliminate the Conflict(2-SAT)
- findbugs安装方法
- linux + busybox编译以及在qemu中运行
- 用Darwin和live555实现的直播框架
- 4412裸机程序之中断
- http请求
- matlab学习笔记(八)---空域滤波增强
- opencv下char数组数据显示
- 4412裸机程序之IIC
- Eclipse CDT 代码首次编译通过,第二次编译提示error: ld returned 1 exit status
- JAVA设计模式(21) —<行为型>访问者模式(Visitor)