編譯linux3.16內核心得

LaurenceMee 8年前發布 | 16K 次閱讀

來自: http://my.oschina.net/wuqingyi/blog/614472


這次編譯使用的內核源碼是3.16.
1.安裝build-essential:sudo apt-get install build-essential
2.安裝交叉編譯器:sudo apt-get install gcc-4.7-arm-linux-gnueabi(如果是sudo apt-get install gcc-arm-linux-gnueabi默認是安裝最新版的,即5.0版本,但是編譯的時候一直會報說找不到include/linux/compiler-gcc5.h,于是卸載了,換成4.7,但是編譯的時候又報錯說沒有arm-linux-gnueabi-gcc,原來4.7版本的gcc是arm-linux-gnueabi-gcc-4.7,于是更改內核源碼根目錄下的Makefile,把CC= $(CROSS_COMPILE)gcc改成CC= $(CROSS_COMPILE)gcc-4.7,順利編譯!)
3.下載linux-3164.tar.xz并解壓。
4.進入解壓后的文件夾,打開Makefile文件,替換Makefile中變量ARCH和CROSS-COMPILE:

    ARCH := arm
    CROSS-COMPILE:= arm-linux-gnueabi-

    
5.配置內核

如果想使用默認模板,使用命令:

make xxxx_defconfig

xxxx_defconfig在arch/arm/configs/中,你想使用哪個模板就make arch/arm/configs/文件夾中的文件的文件名。
.如果想自己配置內核,可以利用

make config                              #基于文本的最為傳統的配置界面,不推薦使用
make menuconfig                    #基于文本選單的配置界面,字符終端下推薦使用,需要安裝libncurse-dev
make xconfig                            #基于圖形窗口模式的配置界面,Xwindow 下推薦使用,需要安裝libqt-dev

 三個命令中的一種開啟配置系統進行內核的詳細配置,重點關注system type(設置cpu類型)。
6.使用“make zImage”或“make bzImage” 建立的為壓縮的內核映像。
7.制作根文件系統(成功編譯并可以作為根文件系統的busybox是用gcc-arm-linux-gnueabi 的5.0版本編譯,但是我又用4.7版本編譯了一下,還是能編譯成功,但能不能用還沒試.)
下載busybox.
編譯busybox的時候,按照http://fangjian0518.blog.163.com/blog/static/5591965620112171420757/這篇文章來做.
在構建/lib目錄的時候,文章是通過arm-linux-readelf -a bin/busybox | grep 'Shared' (我用的是arm-linux-gnueabi-readelf不是arm-linux-readelf)來確定需要復制哪些庫的,但是我這樣做沒有顯示任何東西,我看到文章中用這條命令以后顯示:
0x00000001 (NEEDED)                     Shared library: [libcrypt.so.1]
0x00000001 (NEEDED)                     Shared library: [libm.so.6]
0x00000001 (NEEDED)                     Shared library: [libc.so.6]
于是我grep 'NEEDED'而不是Shared
 0x00000001 (NEEDED)                     共享庫:[libm.so.6]
 0x00000001 (NEEDED)                     共享庫:[libc.so.6]
 0x00000001 (NEEDED)                     共享庫:[ld-linux.so.3]
文章最后一步是制作根文件系統鏡像,但是我一直無法成功,于是參照http://www.linuxidc.com/Linux/2015-07/119764.htm這篇文章制作.運行的時候一直使用這個命令:qemu-system-arm -M vexpress-a9 -m 256M -kernel zImage -nographic -append "root=/dev/mtdblock0 console=ttyAMA0" -sd rootfs.ext3
結果一直報錯.后來嘗試了一下,把root=/dev/mtdblock0改成root=/dev/mmcblk0,竟然可以工作了.

 

 

 本文由用戶 LaurenceMee 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!