準備作業
虛擬機:VM-Ware 15.0 pro
作業系統:Ubuntu Linux 16.04
交叉編譯器:arm-linux-gcc 4.6.2
作業檔案夾:/home/用戶名/work
一、內核原始碼獲取
1、從linux官網下載內核
從linux官網下載內核,linux 官方網站是https://www.kernel.org/ 如下圖所示:

2、將內核拷貝到虛擬機中解壓
下載完成后,在虛擬Ubuntu中的作業檔案夾中建立kernel檔案夾并將下載的壓縮包拷貝進去:

解壓縮xz壓縮包:xz -d linux-4.14.232.tar.xz
打開tar包:tar -xvf linux-4.14.232.tar

解壓完畢,生成linux-4.14.232檔案夾,

二、修改原始碼編譯架構及編譯器
1、打開Makefile檔案
進入原始碼檔案夾,用gedit打開Makefile檔案

修改313行和314行對應的架構(arch)和交叉編譯器(CROSS_COMPILE)

三、內核裁剪
1、生成.config默認裁剪選單檔案
我們直接使用linux官方的默認配置即可,直接輸入命令make exynos_defconfig,如下圖所示:

2、進入裁剪界面
配置平臺和除錯串口,在內核原始碼下輸入命令make menuconfig打開裁剪界面,如下圖所示:


3、選擇芯片型別
進入下面的路徑:

把這個路徑的選項配置成下圖所示:

4、配置除錯串口
回傳到menuconfig第一級目錄,從第一級目錄進入到內核監視(Kernel hacking)路徑,選中Kernel low-level debugging functions (read help!)和Early printk選項,如下圖所示:

然后選擇Kernel low-level debugging port (Use Samsung S3C UART 0 for low-level debug) 選項,把串口設定成串口2,如下圖所示:

5、組態檔系統啟動方式
回傳到menuconfig第一級目錄,從第一級目錄進入Boot options:

進入紅框標記的中間一行,設定內核啟動引數,設定如下:

將Kernel command type改為:kernel模式

修改后結果如下:

6、配置網路
itop4412開發板板載dm9621網卡芯片是usb型別,因此需要依賴于usb 網路框架,所以要通過裁剪選單選中支持項:

主選單進入設備驅動選項后,選擇網路設備支持:

選擇"USB網路適配":

在USB網路框架下選擇對DM96XX的支持:

7、配置NFS服務
主選單進入檔案系統選項,如下圖:

繼續進入網路檔案系統:

在 網路檔案系統配置界面,選中和NFS相關的選項,如下圖:

注意!linux4.14.152內核支持nfs客戶端的最高版本為NFSv4.1,經測驗發現,雖然內核保留早起nfsv2版本,但是不與該版本的服務器相匹配,服務器端即虛擬機端要下載nfsv3以上版本,(現在從apt上下載的都是nfsv3版本及以上了)
設定完成后,保存并退出,
四、編譯內核
我們在內核原始碼下輸入以下命令:
其中LOADADDR=0X40007000 表示指定內核的加載地址,如下圖所示:

編譯完成,系統提示如下:

五、修改設備樹(dts)檔案
進到內核arch/arm/boot/dts/下,里面默認有itop的設備樹檔案,如下圖所示:

打開編輯修改exynos4412-itop-scp-core.dtsi檔案:
1、注釋掉firmware設備
firmware是三星的一個韌體的設備資訊,因為找不到韌體,所以內核啟動不成功,注釋掉29到32行的代碼,如下圖所示:

2、修改event屬性
因為沒有events這個屬性,所以我們要把72行的events修改成event,如下圖所示:

3、配置核心板電源芯片
這部分大家可以對照下scp的核心板原理圖,也可以參考下圖,把下面的代碼修改成如下圖所示:








保存退出,
打開編輯修改exynos4.dtsi檔案:
4、解決字串溢位問題
檔案中的串口2節點serial_2中的dmas屬性如圖注釋掉:

保存退出,
5、編譯設備樹
輸入下圖所示命令:

等待編譯輸出結果:

六、燒寫鏡像
我們把編譯生成的uimage和dtb以及系統檔案根目錄system.img,uboot使用我們移植好的uboot_2015.04即可,具體燒寫方法大家可以看燒寫章節,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286478.html
標籤:其他
