linux 核心模組程式設計之環境搭建(一)
這裡介紹些關於Tiny6410開發板核心的編譯,為後期驅動開發做前期的準備。
開發環境:64位的Ubuntu 14.01虛擬機器
目標機:友善之臂Tiny6410開發板
核心:linux-2.6.38-20110325.tar.gz
核心原始碼下載地址 https://www.kernel.org/pub/linux/kernel/v2.6/ ;
Tiny6410核心下載地址 http://pan.baidu.com/s/1qX2ZBNu
核心結構:
arch
核心所支援的每種CPU體系,在該目錄下都有對應的子目錄,每種CPU的子目錄又進一步分解為
mach開頭的目錄都代表著一種開發板,其他目錄為arm系列所共有的。
|--x86 英特爾CPU及與之相容體系結構的子目錄
||--boot 載入程式
|||--compressed 核心解壓縮
||--tools 生成壓縮核心映像的程式
||--kernel 相關核心特性實現方式,如訊號處理、時鐘處理
||--lib 硬體相關工具函式
block
部分塊裝置驅動程式
crypto
加密、壓縮、CRC
Documentation
核心的文件
drivers
裝置驅動程式
fs
存放各種檔案系統的實現程式碼。每個子目錄都對應一種檔案系統的實現,公用的源程式用於實現虛擬檔案系統VFS
||--devpts /dev/pts虛擬檔案系統
||--ext2 第二擴充套件檔案系統
||--fat MS的fat32檔案系統
||--isofs ISO9660光碟cd-rom上的檔案系統
include
核心所需要的標頭檔案。與平臺無關的標頭檔案在include/linux子目錄下,與平臺相關的標頭檔案則放在相應的子目錄下。
lib
庫檔案程式碼
mm
用於實現記憶體管理中與體系結構無關的部分,與體系結構相關的程式碼在arch目錄下
net
網路協議的實現程式碼
||--802 802無線通訊協議核心支援程式碼
||--appletalk 與蘋果系統連網的協議
||--ax25 AX25無線internet協議
||--bridge 橋接裝置
||--ipv4 IP協議族V4版32位定址模式
||--ipv6 IP協議族V6版
Samples
一些核心程式設計的範例
Scripts
配置核心的指令碼
Security
SElinux的模組
Sound
音訊裝置的驅動程式
Usr
CPIO命令實現
Virt
核心虛擬機器
我使用的開發板如下:
第一步:搭建交叉編譯環境
我使用的是4.5.1的交叉編譯器,下載地址如下
arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
連結:http://pan.baidu.com/s/1hrd2uX2 密碼:x7wi
下載完之後使用root使用者將壓縮包解壓到/opt目錄下,如下:
解壓完之後,修改/etc/environment,在末尾新增交叉編譯器的路徑,如下:
然後就可以驗證交叉編譯器是否安裝成功了,執行如下命令:
看到這樣的結果,說明gcc安裝成功了,由於我是64的作業系統,所以在這之前需要安裝如下外掛:
$sudo apt-get install lsb-core
這樣才能正常使用交叉編譯器
第二步:編譯核心
編譯Tiny的核心會稍微簡單一點,我也忘記我這個核心是從哪裡的了,可能是廠家給的,也可能是網上下的,反正就這麼放在硬盤裡。
解壓linux-2.6.38-20110325.tar.gz,如下:
我的板子螢幕尺寸是640x480,所以我應該使用config_mini6410_vga640x480 配置檔案。
執行1:$cp config_mini6410_vga640x480 .config
執行2:$make menuconfig
執行3:$make V=s
執行完成後,就可以看到檔案arch/arm/boot/zImage了。
這裡要說明下,網上很多教程都說要修改Makefile,還有要從arch/arm/路徑下拷貝生產.config檔案,如下。
其實這都是針對編譯純淨版核心而言,那麼核心就不能使用廠家提供的核心了,因為廠家提供的核心裡面集成了很多廠家自己根據板子外圍裝置編寫的驅動程式,這對於學習驅動還是有幫助的,可以先學著如何改驅動。
第三步:燒錄新編譯的核心
這個如何燒錄的話,看廠家提供的刷機指南,就好了,這裡不多說了!