花了一周時間 總算成功編譯了 2.6.30核心
中間出了一堆問題,vmware版本問題 ubuntu10.10連無線網問題 ubuntu宿主機檔案分享權限設定問題 滑鼠釋放問題 redhat編譯缺庫問題 。。。。。
對於我這種linux大內低手而言 都是一道道坎兒。好幾次想放棄 直接裝個高核心版本的ubuntu算了,最後還是堅持下來了 獎勵下自己 呵呵
簡述編譯過程 以後忘了 想撿起來容易些
先說一些假單命令 老是忘:
關機重啟命令:
1、reboot
2、shutdown -r now 立刻重啟(root使用者使用)
3、shutdown -r 10 過10分鐘自動重啟(root使用者使用)
4、shutdown -r 20:35 在時間為20:35時候重啟(root使用者使用)
如果是通過shutdown命令設定重啟的話,可以用shutdown -c命令取消重啟
關機命令:
1、halt 立刻關機
2、poweroff 立刻關機
3、shutdown -h now 立刻關機(root使用者使用)
4、shutdown -h 10 10分鐘後自動關機
如果是通過shutdown命令設定關機的話,可以用shutdown -c命令取消重啟
vi
賦值7行 7yy, p
刪除多行 7dd 刪除單字 x 或X(游標前後區別),,刪除多字 7x(7X)
行號 set nu
編譯過程簡單,容後述,現將編譯工具和庫的安裝:
ubuntu9.04,連網正常的情況下
apt-get install build-essential(安裝gcc,make等編譯工具)
apt-get install libncurses-dev (安裝menuconfig所需的庫檔案)
apt-get install kernel-package
apt-get install fakeroot(產生kernel-image的工具)
apt-get install initramfs-tools(產生initramfs的工具),modules-init-tools(安裝modules的工具)
如果要GTK make gconfig
apt-get update
apt-get install libncurses5 wget bzip2
這些做好後 基本成功99%,然後
make mrproper(清空之前編譯影響)
make menuconfig(有qt的話,可以xconfig)
make j10(多線程並行 能快些,之後可以在arch/x86/boot下可以看到bzImage)
make install(把bzImage拷貝到/boot下,並改名為vmlinux-2.6.30,同時吧 .config檔案拷貝到/boot 中,改名為config-2.6.30)
make modules_install (設定檔中設定為‘m’的被編譯成好多模組,將它們安裝到/lib/modules中)
mkinitramfs -o /boot/initrd.img-2.6.30 /lib/modules/2.6.30(建立initramfs,一個臨時根檔案系統)
修改grub項(menu.lst檔案的啟動核心選項添加一項)然後reboot
簡單介紹initrd 和 initramfs的概念,以待以後詳細研究
initial RAM disk Linux® 初始 RAM磁碟(initrd)是在系統引導過程中掛載的一個臨時根檔案系統,用來支援兩階段的引導過程。initrd檔案中包含了各種可執行程式和驅動程式,它們可以用來掛載實際的根檔案系統,然後再將這個 initrd RAM 磁碟卸載,並釋放記憶體。在很多嵌入式Linux 系統中,initrd 就是最終的根檔案系統。本文將探索 Linux 2.6 的初始 RAM 磁碟,包括如何建立以及如何在Linux 核心中使用。
initramfs與initrd類似,也是初始化好了且存在於ram中的,可以壓縮也可以不壓縮。但是目前initramfs只支援cpio包格式,它會被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end - &__initramfs_start, 0)函數(解壓縮、)解析、安裝。
initramfs與initrd區別
(1) Linux核心只認cpio格式的initramfs檔案包(因為unpack_to_rootfs只能解析cpio格式檔案),非cpio格式的 initramfs檔案包將被系統拋棄,而initrd可以是cpio包也可以是傳統的鏡像(image)檔案,實際使用中initrd都是傳統鏡像檔案。
(2) initramfs在編譯核心的同時被編譯並與核心串連成一個檔案,它被連結到地址__initramfs_start處,與核心同時被 bootloader載入到ram中,而initrd是另外單獨編譯產生的,是一個獨立的檔案,它由bootloader單獨載入到ram中核心空間外的地址,比如載入的地址為addr(是物理地址而非虛擬位址),大小為8MB,那麼只要在命令列加入"initrd=addr,8M"命令,系統就可以找到 initrd(當然通過適當修改Linux的目錄結構,makefile檔案和相關代碼,以上兩種情況都是可以相通的)。
(3) initramfs被解析處理後原始的cpio包(壓縮或非壓縮)所佔的空間(&__initramfs_start - &__initramfs_end)是作為系統的一部分直接保留在系統中,不會被釋放掉,而對於initrd鏡像檔案,如果沒有在命令列中設定"keepinitd"命令,那麼initrd鏡像檔案被處理後其原始檔案所佔的空間(initrd_end - initrd_start)將被釋放掉。
(4) initramfs可以獨立ram disk單獨存在,而要支援initrd必須要先支援ram disk,即要配置CONFIG_BLK_DEV_INITRD選項 -- 支援initrd,必須先要配置CONFIG_BLK_DEV_RAM -- 支援ram disk ,因為initrd image實際就是初始化好了的ramdisk鏡像檔案,最後都要解析、寫入到ram disk裝置/dev/ram或/dev/ram0中。
注: 使用initramfs,命令列參數將不需要"initrd="和"root="命令? YES