第一、二期銜接——7.1 移植3.4.2內核—框架介紹及簡單修改

移植3.4.2內核—框架介紹及簡單修改

  • 硬件平臺:韋東山嵌入式Linxu開發板(S3C2440.v3)
  • 軟件平臺:運行於VMware Workstation 12 Player下UbuntuLTS16.04_x64 系統
  • 參考資料:《嵌入式Linux應用開發手冊》
  • 開發環境:Linux-3.4.2 內核、arm-linux-gcc-4.3.2工具鏈


一、安裝arm-linux-gcc 4.3.2工具鏈

用root用戶登錄

1、解壓

tar -zxvf arm-linux-gcc-4.3.2 tar.bz2 -C /

這樣解壓完成後的文件在:/opt/FriendlyARM/toolschain/4.3.2路徑下(實際上在哪個目錄下都可以)。

2、移動

將上面解壓的4.3.2目錄拷貝到/usr/local

cd /usr/local 
mkdir arm
chmod 777 arm
cp -r /opt/FriendlyARM/toolschain/4.3.2 /usr/local/arm

3、修改環境變量

vi  /etc/profile
export PATH=$PATH:/usr/local/arm/4.3.2/bin

4、生效

source /etc/profile

5、驗證

執行echo $PATH查看環境變量
執行arm-linux-gcc -v查看工具鏈版本號

6、可能出現的問題及解決辦法

  • 問題:
    若系統是32位,則按照以上步驟即可完成。
    若是64位系統,可能會出現以下情況:
    當輸入arm-linux-gcc -v 時,出現/usr/local/arm/4.3.2/bin/arm-linux-gcc: line 3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: No such file or directory。

  • 原因:
    這是因爲64位的系統缺少32位的庫導致的。

  • 解決辦法:
    sudo apt-get update
    sudo apt-get install lib32z1

這樣就可以進行交叉編譯了。

二、配置內核

1、解壓

上傳內核壓縮包並解壓

tar xjf linux-3.4.2.tar.bz2

得到如下目錄linux-3.4.2
在這裏插入圖片描述

2、內核配置

2.1 修改Makefile

/work/system/linux-3.4.2目錄下vi Makefile

在這裏插入圖片描述

2.2 選擇默認配置

在此目錄下/work/system/linux-3.4.2/arch/arm/configs會有這個文件s3c2410_defconfig
/work/system/linux-3.4.2目錄下,執行make s3c2410_defconfig,最終會的到一個.config文件
在這裏插入圖片描述

通過vi .config可以看到,生成的配置文件中支持如下2440板子的配置
在這裏插入圖片描述

2.3 make uImage編譯

/work/system/linux-3.4.2目錄下,執行make uImage,出現如下錯誤:
在這裏插入圖片描述

  • 原因:
    查了一下更新,發現其中有一項是perl版本升級到了 v5.22.1,然後查了perl官方文檔,發現官網因爲一個bug,該版本將defined(@array)去掉了。可以直接使用數組判斷非空。

  • 解決方法:
    打開在/work/system/linux-3.4.2/kernel目錄下的timeconst.pl修改:

  • 修改前
    在這裏插入圖片描述

  • 修改後

  • 在這裏插入圖片描述

最終內核編譯成功
vi

三、燒寫

1、問題

直接通過NFS網絡系統燒寫uImage,開發版啓動後出現如下問題:輸出的信息亂碼

nfs 0x30007FC0 192.168.1.2:/work/nfs_root/first_fs/uImage
bootm 0x30007FC0 

在這裏插入圖片描述

2、解決辦法1:修改波特率

亂碼的最可能的原因就是波特率不一致,此時重啓啓動u-boot,執行如下命令,設置波特率

 set bootargs console=ttySAC0,115200 root=/dev/mtdblock3
 save

結果依舊是亂碼
在這裏插入圖片描述

3、解決辦法2:設置機器ID

  1. 先執行set machid 16a,這個機器ID是smdk2440(三星工板),可以看到機器ID已經成功設置
    在這裏插入圖片描述
  2. 重啓開發板觀察,可以看到此時串口終於有輸出了。在這裏插入圖片描述

4、其他原因

如果此時程序依舊是hi亂碼,可能是對應機器ID的內核源碼的時鐘頻率有關

到此爲止,新的內核燒寫進去,但是無法正常運行,後面會一步步解決這些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章