国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

使用Busybox做一個(gè)小巧的Linux操作系統(tǒng)

2024-06-28 13:03:06
字體:
供稿:網(wǎng)友
 

1.基礎(chǔ)知識(shí)

一個(gè)操作系統(tǒng)可以簡單的抽象為,引導(dǎo)程序 內(nèi)核 文件系統(tǒng)。

vmlinuz是linux 內(nèi)核的鏡像文件,可以被引導(dǎo)程序加載,從而啟動(dòng)Linux系統(tǒng)。

initrd的全稱是boot loader initialized RAM disk,它是系統(tǒng)啟動(dòng)時(shí)所使用的根文件系統(tǒng)映像文件,這個(gè)文件系統(tǒng)中包含幾個(gè)驅(qū)動(dòng)模塊,用來裝載實(shí)際的根文件系統(tǒng),比如一個(gè)IDE或SCSI硬盤的驅(qū)動(dòng)模塊,內(nèi)核裝入這個(gè)模塊之后用它來驅(qū)動(dòng)硬盤,掛接硬盤到ramdisk的某個(gè)子目錄,然后再用其中的pivot_root命令,將硬盤文件系統(tǒng)變成根文件系統(tǒng),并開始執(zhí)行init進(jìn)程,此時(shí)init ram disk被umount,壽終正寢。

由此可見,我們可以用vmlinuz initrd.img做一個(gè)文件系同長駐內(nèi)存的迷你Linux。

現(xiàn)在進(jìn)入正題了:

2.編譯內(nèi)核

cd /usr/src/....----進(jìn)入內(nèi)核源代碼目錄,沒有的話去官方網(wǎng)站,隨便下

make menuconfig-----配置編譯選項(xiàng)請(qǐng)注意一定加入RAM disk support 和initial RAM disk

(initrd) support 的支持(在block device中)。另外最好將ext3文件系統(tǒng)編入內(nèi)核,不要編成模塊。配置完畢后保存為.config(默認(rèn))

make bzImage----編譯

在許多內(nèi)核編譯參考中還有

make modules

make modules_install兩步

但我們這里沒有加入對(duì)modules的支持,所以不需要。生成的bzImage文件在usr/src/linux/arch/.../boot中,省略的根據(jù)你的機(jī)器架構(gòu)決定,make過程中會(huì)有提示,比如我的是x86_64. 注意這個(gè)文件非常重要,其實(shí)就是我們最終的vmlinuz.

3.busybox

busybox是一個(gè)集成了一百多個(gè)最常用linux命令和工具的軟件,它甚至還集成了一個(gè)http服務(wù)器和一個(gè)telnet服務(wù)器,而所有這一切功能卻只有區(qū)區(qū)1M左右的大小.我們平時(shí)用的那些linux命令就好比是分力式的電子元件,而busybox就好比是一個(gè)集成電路,把常用的工具和命令集成壓縮在一個(gè)可執(zhí)行文件里,功能基本不變,而大小卻小很多倍,在嵌入式linux應(yīng)用中,busybox有非常廣的應(yīng)用,另外,大多數(shù)linux發(fā)行版的安裝程序中都有busybox的身影,安裝linux的時(shí)候案ctrl alt F2就能得到一個(gè)控制臺(tái),而這個(gè)控制臺(tái)中的所有命令都是指向busybox的鏈接.在我們的迷你Linux中,需要的也正是busybox的命令和工具。

下載 http://busybox.net/downloads/

使用過程中許多高版本都出現(xiàn)編譯錯(cuò)誤,所以用了一個(gè)最原始的版本busybox-1.00

#cp busybox-1.00.tar.gz /tmp/bunny

#cd /tmp/bunny

#tar xvfz busybox-1.00.tar.gz

#cd busybox-1.00

#make menuconfig ----編譯配置

下面是需要編譯進(jìn)busybox的功能選項(xiàng),其他的可以根據(jù)需要自選.

General Configuration應(yīng)該選的選項(xiàng)

Show verbose applet usage messages

Runtime SUID/SGID configuration via /etc/busybox.conf

Build Options

Build BusyBox as a static binary (no shared libs)

這個(gè)選項(xiàng)是一定要選擇的,這樣才能把busybox編譯成靜態(tài)鏈接的可執(zhí)行文件,運(yùn)行時(shí)才獨(dú)立于其他函數(shù)庫.否則必需要其他庫文件才能運(yùn)行,在單一個(gè)linux內(nèi)核不能使他正常工作.

Installation Options

Don't use /usr

這個(gè)選項(xiàng)也一定要選,否則make install 后busybox將安裝在原系統(tǒng)的/usr下,這將覆蓋掉系統(tǒng)原有的命令.選擇這個(gè)選項(xiàng)后,make install后會(huì)在busybox目錄下生成一個(gè)叫_install的目錄,里面有busybox和指向它的鏈接.

其他選項(xiàng)都是一些linux基本命令選項(xiàng),自己需要哪些命令就編譯進(jìn)去,一般用默認(rèn)的就可以了.

配置好后退出并保存.config.

make

make install

編譯好后在busybox目錄下生成子目錄_install,里面的內(nèi)容:

bin

linuxrc -> bin/busybox

sbin

其中可執(zhí)行文件busybox在bin目錄下,其他的都是指向他的符號(hào)鏈接.

4.制作自己的root fs

1)目錄結(jié)構(gòu)

mkdir /tmp/myOS/rootfs

cd /tmp/myOS/rootfs

mkdir etc usr var tmp PRoc home root dev

其中etc,proc和dev是一定要建的,bin和sbin不用建,因?yàn)閎usybox中已經(jīng)有了.

其他的可以象征性的建幾個(gè)就可以了.

拷貝busybox

#cp -R /tmp/bunny/busybox-1.00/_install/* /tmp/myOS/rootfs/

2)設(shè)備文件

我是直接從FC系統(tǒng)/dev目錄里cp的,方法如下:

#cp -R /dev/console /tmp/myOS/rootfs/dev/

#cp -R /dev/null /tmp/myOS/rootfs/dev/

#cp -R /dev/zero /tmp/myOS/rootfs/dev/

你認(rèn)為需要的都cp過來

有的參考文獻(xiàn)說fd0,hda,ram,ram1,tty1,loop1,fb0,fb,tty等是必備的,但是好像有些文件并沒有

3)建立etc目錄下的配置文件

我是直接拷貝busybox自帶的例子

cp -R tmp/bunny/busybox-1.00/examples/bootfloppy/etc/* /tmp/myOS/rootfs/etc

4)制作initrd.img映象文件

cd /tmp/myOS/

dd if=/dev/zero of=/tmp/disk bs=1M count=32 ------初始化32M內(nèi)存空間

mkfs.ext3 -m0 /tmp/disk ------格式化為ext3

mkdir /mnt/ram

mount -o loop /tmp/disk /mnt/ram ------掛載到/mnt/ram

cp -R rootfs/* /mnt/ram ------把rootfs寫入內(nèi)存

umount /mnt/ram

dd if=/tmp/disk of=/tmp/myOS/initrd.img ------把內(nèi)存中的內(nèi)容以映象方式取出

ok,這個(gè)initrd.img就是我們的rootfs

有的文獻(xiàn)使用ram0,也就是將上述過程的/tmp/disk改為/dev/ram0,雖然制作過程沒有問題,但是它存在大小限制

5.整合,啟動(dòng)

1)kernel

cp /usr/src/linux/arch/x86_64/bzImage /boot/vmlinuz

2)rootfs 一般命名為initrd.img

cp /tmp/myOS/initrd.img /boot

3)有了上述兩個(gè)文件,已經(jīng)可以通過網(wǎng)絡(luò)dhcp, tftp服務(wù)器啟動(dòng),tftp服務(wù)器中添加啟動(dòng)腳本如下

DEFAULT linux

PROMPT 0

LABEL linux

KERNEL vmlinuz

append initrd=initrd.img devfs=nomount ramdisk_size=52000

問題:理論上這個(gè)小Linux也應(yīng)該可以從grub引導(dǎo)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 温宿县| 子长县| 大城县| 长葛市| 延庆县| 资兴市| 和龙市| 元江| 通许县| 宜君县| 阳曲县| 江口县| 甘孜县| 崇明县| 板桥市| 华池县| 韩城市| 九台市| 文山县| 开封县| 西充县| 唐海县| 盐城市| 上犹县| 乌恰县| 安泽县| 新泰市| 加查县| 潼南县| 邵武市| 余江县| 通辽市| 贞丰县| 广饶县| 辽阳县| 镇平县| 德州市| 贵州省| 上思县| 丹巴县| 江津市|