linux操作系统实验四--打造自己的Linux发行版

来源:互联网 发布:美女朗读软件 编辑:程序博客网 时间:2024/05/21 18:46

准备工作

1.安装QEMU
2.编译内核
3.制作根系统目录
上面的工作参考linux操作系统实验四--qemu的安装和根目录系统制作

整合busybox

busybox简介

           BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。
            BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件。这样的集合可以替代大部分常用工具比如的GNU fileutils , shellutils等工具,BusyBox提供了一个比较完善的环境,可以适用于任何小的或嵌入式系统。

1.安装busybox
1)下载源代码:http://www.busybox.net/
        得到busybox-1.20.0.tar.bz2稳定版。
        解压
tar jxvf  busybox-1.20.0.tar.bz2

2)   终端进入目录执行
    
  cd ./busybox-1.20.0
 make menuconfig
     勾选下面的选项:
     Build Options
     Build BusyBox as a static binary (no shared libs)
     这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.
3)编译busybox
make

报错:
networking/lib.a(inetd.o): In function `unregister_rpc':
inetd.c:(.text.unregister_rpc+0x17): undefined reference to `pmap_unset'
networking/lib.a(inetd.o): In function `register_rpc':
inetd.c:(.text.register_rpc+0x5a): undefined reference to `pmap_unset'
inetd.c:(.text.register_rpc+0x81): undefined reference to `pmap_set'
networking/lib.a(inetd.o): In function `prepare_socket_fd':
inetd.c:(.text.prepare_socket_fd+0x8a): undefined reference to `bindresvport'
collect2: ld 返回 1
make: *** [busybox_unstripped] 错误 1
通过google:
好像是和glibc版本过高有关,找不到相关函数,这个好办,make menuconfig 去掉如下选项
Networking Utilities  —> [ ] inetd (Internet 超级服务器 )
http://blog.csdn.net/hshl1214/article/details/8668042
4)安装busybox
make install
安装好之后在busybox-1.20.0文件夹下出现了一个_install文件夹,编译完成。
如下图:


2.整合根文件系统
在linux操作系统实验四--qemu的安装和根目录系统制作之前建立的init文件夹目录下已经存在了rootfs文件夹目录了。
新的文件目录图:

1)进入init目录:
cd ./init
2) 挂载镜像
sudo mount -o loop  initrd.img rootfs/
3)将busybox添加进来

cd ../busybox-1.20.0/sudo make CONFIG_PREFIX=../init/rootfs/ install
4)查看rootfs中的结构
ls rootfs
5)卸载分区
sudo umount rootfs/
下面介绍下linux系统下的目录:http://wenku.baidu.com/view/718526c9da38376baf1faeee.html
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示。
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件。
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序。
/tmp 公用的临时文件存储点。
/root 系统管理员的主目录。
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下的“无家可归”的文件。
/proc 虚拟的目录,是系统内存的映射,可以直接访问这个目录来获取系统的信息。
/var  某些大文件的溢出区,比如说各种服务的日志文件。
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
......
通常情况下,根文件系统所占用空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。
除了可能的一个叫/vmlinux标准的系统引导影像之外,根目录一般不包含任何文件。

上面五步的过程如下图:

最后生成的initrd.img文件就是根文件系统。
6)qemu测试
qemu -kernel ../LinuxKernel/linux-3.9/arch/x86/boot/bzImage -initrd initrd.img -append "root=/dev/ram init=/bin/sh"

7)还可以进行一些简单命令的测试:



原创粉丝点击