撿起linux —(2)第一次成功編譯核心

來源:互聯網
上載者:User

花了一周時間  總算成功編譯了   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

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.