編譯前準(zhǔn)備工作
-
yum install "Development Tools" "Server Platform Development"
C語言程序源代碼編譯安裝步驟
1称簿、 ./configure :使用這個(gè)模板makefile.in生成makefile文件
- 通過選項(xiàng)傳遞參數(shù),指定啟用特性,安裝路徑等;執(zhí)行時(shí)會(huì)參考用戶的指定以及makefile.in文件生成makefile
2、make: 檢查依賴到的外部環(huán)境
- 根據(jù)Makefile文件去構(gòu)建應(yīng)用程序,其make工具是C、C++項(xiàng)目管理器籽懦,調(diào)用GCC編譯器,對(duì)C ,C++的程序進(jìn)程編譯
3锉试、make install
- 利用腳本把二進(jìn)制程序放到相應(yīng)目錄
4猫十、導(dǎo)出二進(jìn)制程序目錄至環(huán)境變量PATH中
- 編輯/etc/profile.d/name.sh
- export PATH=$PATH:/usr/local/bin
5览濒、輸出庫(kù)文件路徑
- 編輯/etc/ld.so.conf.d/name.conf
- 直接添加庫(kù)文件的路徑即可
- 使用ldd命令重讀庫(kù)配置文件輸出至系統(tǒng)緩存,可以使用
-v
選項(xiàng)拖云,查看詳細(xì)信息
6贷笛、導(dǎo)出頭文件
- ln -sv /usr/local/apache2/include /usr/include
- 或者 ln -sv /usr/local/apache2/include/* /usr/include
7、導(dǎo)出幫助手冊(cè)
Centos 6
- 編輯/etc/man.config
- 添加manpath /path/to/dir
Centos 7
- 編輯/etc/man_db.conf
- 添加manpath_map /path/to/dir
8宙项、制作服務(wù)管理腳本
- 存放至/etc/init.d/目錄下乏苦,并賦于其執(zhí)行權(quán)限
- 使用chkconfig --add NAME
- 將服務(wù)添加開機(jī)自啟,chkconfig NAME on
編譯內(nèi)核
編譯前提:
1、準(zhǔn)備好開發(fā)環(huán)境
2尤筐、獲取目標(biāo)主機(jī)上硬件設(shè)備的相關(guān)信息
3汇荐、獲取到目標(biāo)主機(jī)系統(tǒng)功能的相關(guān)信息,例如:是否要啟用文件系統(tǒng)等模塊
4盆繁、獲取內(nèi)核源代碼包:www.kernel.org
準(zhǔn)備開發(fā)環(huán)境
Centos 6
- 安裝"Development Tools"掀淘,"Server Platform Development"包組
Centos 7
- 安裝"Development tools","Sserver paltform development","Desktop platform development"包組
注意:由于編譯內(nèi)核的界面程序由ncurses軟件提供,需要安裝主程序包和開發(fā)包油昂,才能運(yùn)行make menuconfig程序
查看設(shè)備硬件信息
- cat /proc/cpuinfo
- lscpu
- x86info
- lspci
- lsusb
- lsblk
- hal-device(Centos 6)
內(nèi)核編譯過程
1革娄、獲取源代碼
2、tar xf linux-3.10.67.tar.xz -C /usr/src
3冕碟、ln -sv lunux-3.10.67 linux
4拦惋、cd linux
5、cp /boot/config-3.10.67-229.el7.x86_64 .config
- 這步是借用redhat所提供的編譯配置文件來進(jìn)行編譯配置
6安寺、手動(dòng)定制內(nèi)核功能選項(xiàng)
- make menuconfig
7厕妖、編譯內(nèi)核
- make [-j # ] ,
-j #
:是指定使用#個(gè)邏輯CPU進(jìn)行編譯,以提高編譯速度
8挑庶、安裝內(nèi)核模塊
- make modules_install
- 此步會(huì)在/usr/lib/modules/[VERSION-RELEASE]/下生成相應(yīng)的模塊文件和模塊依賴關(guān)系文件
9言秸、安裝內(nèi)核
- make install
- 此步會(huì)將內(nèi)核文件、ramdisk文件自動(dòng)安裝至/boot目錄下挠羔,并以相應(yīng)的版本命名存放井仰,并且還會(huì)將grub.conf文件配置好新的內(nèi)核文件埋嵌。
注意:如果編譯好的內(nèi)核在開機(jī)引導(dǎo)出現(xiàn)故障時(shí)破加,導(dǎo)致無法進(jìn)入系統(tǒng),可以在開機(jī)grub引導(dǎo)界面雹嗦,傳遞內(nèi)核參數(shù)init=/bin/bash
范舀,以此啟用bash程序,以此來完成修復(fù)工作了罪。
編譯一部分代碼
-
只編譯某子目錄中的相關(guān)代碼
- cd /usr/src/linux
- make path/to/dir
-
只編譯一個(gè)特定的模塊
- cd /usr/src/linux
- make path/to/dir/file.ko
交叉編譯
編譯的目標(biāo)平臺(tái)與當(dāng)前編譯操作所在的平臺(tái)不同
- make ARCH=arch_name
要獲取特定目標(biāo)平臺(tái)的使用幫助
- make ARCH= arm help
在執(zhí)行過編譯操作的內(nèi)核源碼樹上做重新編譯
- make clean
- 清理編譯生成的絕大多數(shù)文件锭环,但會(huì)保留.config配置文件,以編譯外部模塊所需要的文件
- distclean
- 相當(dāng)于mrproper泊藕,額外清理各種pathches以及編輯器備份文件
- mrproper
- 清理編譯生成的所有文件辅辩,包括配置生成的config文件及某些配置文件