歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Red hat Linux

基於BusyBox與紅帽2.6.38.5內核完成的微型系統制作流程

編譯制作之前要准備好開發工具即 "Development Tools" "Development Libraries",前面都已做過介紹這裡就不多說了詳細了解請點擊這裡 http://www.linuxidc.com/Linux/2013-05/84480.htm;這次實驗流程操作使用的是vm9虛擬機,所以大家在操作時速度建議不要過快,並且要多多sync(切記)

實驗中所有工具的下載地址 http://pan.baidu.com/share/link?shareid=569752&uk=487907638

busybox-1.20.2.tar 下載地址見 http://www.linuxidc.com/Linux/2011-08/40704.htm

首先編譯紅帽Linux2.6.38.5內核

tar xf linux-2.6.38.5.tar.bz2 —C /usr/src/
創建一個鏈接
ln -sv linux-2.6.38.5/ linux
配置內核提供./config文件(這裡提供了一個樣本,名稱是kernel-2.6.38.1-i686.cfg)
cd linux
在直接將此樣本重命名為./config
mv kernel-2.6.38.1-i686.cfg ./config
make menuconfig(根據自己的需要對驅動,文件系統及網絡做選擇性的配置,其中我在配置的時候直接把ext3做成了內核模塊)
開始編譯
make SUBDIR=arch/
當編譯完成後,提供微型系統新內核 (編譯需要一段時間,這裡的順序只是為了方便閱讀,自己操作時,可先做下面的步驟,等到編譯完成後再進行復制內核)

提供內核

cp /usr/src/linux/arch/x86/boot/bzImage /mnt/boot/vmlinz

准備grub

安裝grub:
grub-install --root-directory=/mnt/ /dev/hda
配置grub.conf
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title My Linux (2.6.18)
 root(hd0,0)
 kernel /vmlinuz ro root=/dev/hda2
 initrd /initrd.gz

提供initrd即編譯使用Busybox

編譯前准備操作
tar xf busybox-1.20.2.tar.bz2 -C /root/
mkdir busybox-1.20.2/include/mtd
cp /usr/src/linux/include/mtd/ubi-user.h busybox-1.20.2/include/mtd(復制2.6.38內核的頭文件)
編譯busybox
cd busybox-1.20.2
make menuconfig (這其中不需要更改太多,把編譯選項改一下即可,編譯成一個二進制文件方便 移植)
make install
cd _install/ (編譯完成後進入這個目錄)
rm -rf linuxrc (刪除自動為我們創建的鏈接文件)
mkdir /tmp/initrd (自行創建一個目錄,把_install文件復制到這裡,一切配置在這裡更改)
cp busybox-1.20.2/_install/* /tmp/initrd
cd /tmp/initrd
mkdir proc sys mnt/sysroot dev tmp lib/modules etc -pv (創建基本目錄)
mknod dev/console c 5 1 (創建設備文件)
mknod dev/null c 1 3
創建init腳本
完成的任務:
1、掛載proc文件系統,proc文件系統是用來輸出內核映像的
2、掛載sys文件系統(輸出硬件信息)
3、導入內核模塊,導入ext3內核模塊,否則無法訪問真正的文件系統(這裡的/dev/hda2格式化為了ext3,如果是格式化成ext2就不要安裝這個模塊)
腳本內容如下:
#!/bin/sh
#
echo "mounting proc and sys....."
mount -t proc proc /proc
mount -t sysfs sysfs /sys

echo "Detect and export hardware infomation...." 動態創建設備文件的方式
mdev -s

echo "Mount real rootfs to /mnt/sysroot....."
mount -t ext3 /dev/hda2 /mnt/sysroot 掛載真正的文件系統

echo "Switch to real rootfs....."
exec switch_root /mnt/sysroot /sbin/init 切換到/mnt/sysroot這個根上,然後執行/mnt/sysroot這個目錄下的/sbin/init命令
chmod +x init
歸檔壓縮生成initrd文件
find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz

記得要sync哦!

Copyright © Linux教程網 All Rights Reserved