成功完成Linux建立最小根文件的過程
在學(xué)習(xí)Linux操作系統(tǒng)時(shí)會(huì)遇到這樣那樣的問題,本文講解一些會(huì)遇到的問題,比如說怎樣為Linux建立最小根文件系統(tǒng),希望你能學(xué)會(huì)Linux建立最小根文件系統(tǒng)。在編譯內(nèi)核時(shí)候,可以指定一個(gè)文件夾作為內(nèi)核啟動(dòng)時(shí)候的根文件系統(tǒng),Linux中管這個(gè)文件系統(tǒng)叫做initramfs。
具體做法如下(以i386為例)
1.下載內(nèi)核文件
wget http://www.kernel.org/pub/Linux/kernel/v2.6/Linux-2.6.26.tar.bz2
2.解壓內(nèi)核
bzip2 -d Linux-2.6.26.tar.bz2生成一個(gè)Linux-2.6.26.tar文件,然后
tar xvf Linux-2.6.26.tar
解壓后,將有個(gè)Linux-2.6.26文件夾存在
3.準(zhǔn)備一個(gè)iniramfs文件系統(tǒng)的文件夾
在Linux-2.6.26文件夾下建立一個(gè)文件夾 myinitramfs
寫一個(gè)測試用的hello world,起名為hello.c,如下:
- #include <stdio.h>
- #include <unistd.h>
- int main(int argc,char *argv[])
- {
- int i = 0;
- while (1) {
- printf("hello world (%d)\n",i);
- }
- return 0;
- }
編譯gcc -static -o init hello.c
把init拷貝到myinitramfs文件夾下。
cp init myinitramfs/
由于需要顯示文字,還需要在文件夾下準(zhǔn)備console設(shè)備文件。
mkdir myinitramfs/dev
cp -a /dev/console myinitramfs/
4.編譯內(nèi)核
在Linux-2.6.26文件下下,執(zhí)行make help。
將看到很多幫助信息,其中有一項(xiàng)是 i386_defconfig
執(zhí)行 make i386_defconfig,將生成一個(gè).config文件。
為了把之前準(zhǔn)備好的文件夾添加到內(nèi)核配置文件中,還需要重新配置下config文件
- make config
- 在 General Setup --->
- Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD) [Y/n/?]
- Initramfs source file(s) (INITRAMFS_SOURCE) [myinitramfs]
處,輸入準(zhǔn)備好的文件夾.
配置好后,在.config文件中會(huì)有如下一條定義
CONFIG_INITRAMFS_SOURCE="myinitramfs"
保存.config
make 編譯內(nèi)核
5.用qemu測試內(nèi)核和initramfs
qemu -kernelLinux-2.6.26/arch/i386/boot/bzImage-initrd Linux-2.6.26/usr/initramfs_data.cpio.gz/dev/zero
initramfs_data.cpio.gz 這個(gè)文件是內(nèi)核自動(dòng)生成的,具體名字可能不同的系統(tǒng)或者內(nèi)核有差異,但是后綴應(yīng)該是.cpio.gz
成功的完成了Linux建立最小根文件系統(tǒng)的過程。
【編輯推薦】