移植Busybox到宿主机

本文详细介绍如何将Busybox移植到宿主机上,包括构建引导程序、内核映像及文件系统的过程。通过具体步骤演示如何配置并编译Busybox,创建必要的文件系统结构,并最终实现宿主机上的迷你Linux系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移植Busybox到宿主机


今天,我们要做的不是把Busybox移植到开发板上,而是要移植到我们的主机上:


任何一个可启动的Linux都由三部分组成:引导程序,内核映像和文件系统,下面依次介绍。


一 引导程序:

为了不要太复杂,今天的实验假设我们的主机上已经安装好了grub(像本人,安装好Ubuntu后就自动装好了grub,因此这步直接跳过),我们就用它来启动我们的迷你Linux。



二 内核映像(vmlinuz

直接在 http://www.kernel.org/ 上下载Linux的源代码,然后编译,注意目标平台是x86就行了,在此不再赘述(详细过程参见我的另一篇文章:http://blog.csdn.net/htttw/article/details/7215873),编译好之后,会在arch/x86/boot下生成bzImage(make bzImage)或zImage(make zImage),然后copy到/boot下:

sudo cp arch/x86/boot/bzImage /boot/vmlinuz



三  文件系统(initrd.gz

我们用Busybox来构建我们的文件系统:

1.

在 http://busybox.net 下载Busybox,我的版本是busybox-1.19.3.tar.bz2

2.

tar jxvf busybox-1.19.3.tar.bz2

cd busybox-1.19.3

make menuconfig                                //跟配置Linux是一样的

这里特别注意,在Busybox Settings --> Build Options 里务必选上“Build BusyBox as a static binary (no shared libs)”表示把Busybox编译成静态库

其他保持默认值,然后保存

make

make install

就会生成_install文件夹

(具体配置过程参见我的另一篇文章:http://blog.csdn.net/htttw/article/details/7215874



这里插一句:其实我们现在就可以测试了,和最终的效果是一样的:

cd _install

cd ..

sudo chroot /_install /bin/sh

这样就进入了Busybox了~~



上面只是准备工作,下面才开始好玩了:


生成的_install目录下只有bin,sbin等目录,所以为了构建Linux文件系统,我们必须创建其他目录:

cd _install

mkdir proc sys etc dev


然后创建console和null设备文件

cd dev

sudo mknod console c 5 1

sudo mknod null c 1 3


然后创建etc下的相关文件:

init进程是内核创建的第一个进程,他会解释执行/etc/inittab里的命令,然后执行init.d/rcS脚本文件,在这个脚本文件里我们需要挂载文件系统,至于挂载哪一个文件系统,就由fstab文件决定:


首先创建fstab文件:

cd etc

vim fstab,输入以下内容:


然后创建rcS脚本文件:

cd etc

mkdir init.d

cd init.d

vim rcS,输入以下内容:

chmod +x rcS          这步不要忘记!


然后创建inittab文件:

cd etc

vim inittab,输入以下内容:



然后:

切换到_install目录下

rm linuxrc

输入如下命令:

ln -sv bin/busybox init(如图)



最后,我们把_install目录做成我们的根文件系统:

输入如下命令:

find . | cpio --quiet -H newc -o | gzip -9 -n > ../initrd.gz(如图)



最后把生成的initrd.gz复制到/boot下

sudo cp initrd.gz /boot




至此,以上三步全部完成,下面终于要启动我们的桌面版Busybox啦~~


重启,在grub引导菜单处输入“c"进入grub命令模式,在命令模式下,我们要告诉grub加载我们第二步做的内核映像vmlinuz和第三步做的文件系统initrd.gz,输入如下命令:

linux /boot/vmlinuz            //指定内核映像的路径(如果提示没有linux命令时,改成kernel /boot/vmlinuz试试)

initrd /boot/initrd.gz           //指定文件系统的路径

boot                                     //开始引导



如果一切没有问题,就会进入Shell,等待我们输入命令啦,这就是我们的桌面Busybox,呵呵,挺好玩的~~


我测试的时候,在_install下mkdir了一个目录,然后进入Busybox里ls了一下发现了这个目录,说明我确实进入了Busybox啦,另外,我还把生成的_install/bin下的date链接删除了,然后进入Busybox里输入date提示没有这个命令,但输入busybox date就输出当前时间了,也说明我确实进入了Busybox啦~~

另外,按“Ctrl+Alt+Del”可以重启哦~~


完成!



参考:

利用busybox制作一个小巧的linux系统(仅两个文件):

http://www.cnblogs.com/yangnas/archive/2010/04/26/1721607.html


### 配置和移植ARM开发环境 #### 准备工作 为了在Ubuntu上配置并移植ARM开发环境至开发板,需先确认主机已安装必要的工具链和支持软件包。这通常涉及交叉编译器、QEMU模拟器以及其他辅助工具的设置。 对于FL2440这样的特定型号开发板,在Ubuntu环境下准备相应的工具链至关重要[^1]。建议采用官方推荐或社区广泛使用的预构建版本来简化这一过程。 #### 工具链安装 通过APT仓库获取GNU ARM Embedded Toolchain是最简便的方法之一: ```bash sudo apt-get update && sudo apt-get install gcc-arm-none-eabi g++-arm-none-eabi binutils-arm-none-eabi ``` 上述命令会下载并安装适合大多数嵌入式系统的GCC编译套件及其依赖项。 #### 文件系统创建 针对不带图形界面的核心版Linux发行版(如Ubuntu Core),可以利用BusyBox提供的`mkfs.ext2`命令初始化目标设备上的分区作为根文件系统的一部分操作[^3]: ```bash busybox mkfs.ext2 /dev/block/mmcblk0p1 ``` 此步骤假设mmcblk0p1代表SD卡或其他存储介质的第一个逻辑分区;实际应用时应根据具体情况调整路径参数。 #### SSH服务部署 为了让远程管理更加便捷高效,可在开发板内部署SSH服务器组件。具体做法是从宿主机向目标机传输预先准备好的OpenSSH配置及相关资源文件,并放置于适当位置以便后续调用[^4]: ```bash scp moduli ssh_config sshd_config root@<target-ip>:/usr/local/etc/ ``` 这里假定已经建立了无密码认证机制从而实现SCP协议下的自动化数据交换流程。 #### Sudo功能集成 如果希望赋予非特权账户执行超级用户级别指令的能力,则有必要引入Sudo实用程序。按照既定指南完成从源码打包直至最终安放各环节的任务后,还需注意修正相应权限位以及补充缺失选项以确保正常使用效果[^5]。 ```bash tar xf sudo-version.tar.gz cd sudo-version ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/sudo make sudo make install DESTDIR=$(pwd)/install-root rsync -av ./install-root/ root@<target-ip>:/ --exclude='etc' ssh root@<target-ip> 'chmod 4755 /usr/local/sudo/bin/sudo; mkdir -p /etc/sudoers.d/' scp sudoers root@<target-ip>:/etc/ ``` 以上脚本片段展示了如何跨平台编译Sudo并将产物同步推送至远端节点的同时妥善处理访问控制列表ACL设定事宜。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值