核心編譯的過程以及出現問題的解決
系統:Ubuntu 16.04 核心版本:2.6.30
1、從網上下載下來的一份核心原始碼 linux-2.6.30.tar.bz2 ,解壓縮 tar jxvf linux-2.6.30.tar.bz2。由於我的檔案放在Download裡面,將解壓後的核心檔案放入到/home目錄下。
2、進入linux-2.6.30目錄 。
3、生成配置檔案:make menuconfig。可以不做任何修改,後面可以根據自己的需要進行新增刪減。
4、生成映象檔案:make bzImage。注意在此過程中,最開始就直接切換為root使用者,避免不必要的麻煩。
接下來會出現一些小問題,如下:
此處需要進入到kernel/timeconst.pl中,將‘if(!defined(@(array))’ 修改為‘if(@val)’即可。
接著會遇到以下問題:
這裡需要下載一個補丁:
在這裡下載:https://linux.linuxidc.com/ 如果需要使用者名稱和密碼都是:www.linuxidc.com。需要的補丁在/2012年資料/2月11日/Linux核心編譯錯誤 ,將該目錄下的檔案下載放在linux-2.6.30目錄下,然後執行 gunzip -dc __gnu_mcount_nc_patch.patch.gz |patch -p1。然後make bzImage 繼續編譯。
5、接著生成modules,make modules。
出現如下錯誤:
vim drivers/scsi/advansys.c中
將8352行的那一個函式,dma_cache_sync(board->dev,scp->sense_buffer,SCSI_SENSE_BUFFRSIZE,DMA_FROM_DEVICE);註釋掉就行,接著make modules執行。
進入到drivers/scsi/osd/osd_initiator,將65、66行都註釋掉,繼續編譯。
接著會出現以下問題
:
分別開啟以上幾個編譯檔案:
vim sound/pci/ali5451/Makefile 將obj-$(CONFIG_SND_ALI5451) +=snd-ali5451.o這一行註釋掉
其他的同理來解決,最終編譯成功。
6、make modules_install。
出現:depmod:WARNINGS:could not open /lib/modules/2.6.30/modules.bulltin:No such file or directory。這個警告可以暫時不用理會。至此,核心編譯完成。若想要新增核心模組,則依據insmod rmmod 步驟來進行新增、刪除等。