記錄...
因為讀書會的工作分配...新生每個人要負責嵌入式系統設計-以ARM處理器基礎之SOC平台這本書的某些章節
在讀書會的時候要提出來報告並討論
而我選擇了:
第6章 µClinux核心(Kernel) 及 第7章 µClinux設備驅動程式
這兩個章節...
因此今天就上網搜尋了一下如何編譯µClinux的核心:
(OS:Fedora 11)
µClinux定義:
µClinux就是一般所謂的作業系統
它是由Linux演變而來的
µClinux這個名稱是micro Controller Linux的簡稱
名稱代表著它是專供微控制器(micro controller)使用的Linux
(以上節錄自:嵌入式系統設計-以ARM處理器基礎之SOC平台一書)
首先要先下載µClinux的核心:http://www.uclinux.org/pub/uClinux/dist/
目前最新版是Full Source Distribution (20090618) 這個版本
不過因為本人眼殘...
把2008看成2009~
所以下載了uClinux-dist-20080808.tar.bz2這個版本...
當初還想說為啥比較舊版的字還最大?!
(而且明明2009.08.08根本就還沒到... 囧rz)
不過用哪個版本的應該都沒關係就是了~
下載好後將核心解壓縮到所要存放路徑
ex:/usr/src/uClinux-dist
另外為了編譯核心
需要使用到arm-linux-tools
(下載:arm-linux-tools-20070808.tar.gz 這個壓縮檔)
及arm-elf-tools
(下載:arm-elf-tools-20030314.sh 這個檔案)
這兩個toolchains...
將下載好的arm-linux-tools-20070808.tar.gz 這個壓所檔中:usr/local/下所有的資料夾
(arm-linux、bin、lib、libexec)
解壓縮到所要存放路徑
ex:/usr/local/arm/這個資料夾下:
cd /usr/local/
sudo mkdir arm
cd arm-linux-tools-20070808.tar.gz所在目錄
sudo tar -xvf arm-linux-tools-20070808.tar.gz /usr/local/arm
之後由於編譯µCLinu核心時需要使用到arm-linux-gcc這個指令
所以需要將/usr/local/arm/bin/這個路徑加入到$PATH環境變數中
sudo vim /etc/profile
在檔案最下面加入:
# For arm-linux-tools
PATH=/usr/local/arm/bin:$PATH
export PATH
存檔後直接使用.或是source /etc/profile便可在當下的環境中取用新設定好$PATH(若是需要永久取用,則需重新登入!!)
另外由於arm-elf-tools-20030314.sh在Fedora下執行會出現以下錯誤:
問題一:tail: cannot open '+43' for reading: No such file or directory
解決方法:
用vim,將第39行的代碼:
tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
改成如下:
tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf -
(多加 -n 參數)
問題二:gunzip: stdin: unexpected end of file
解決方法:
在arm-elf-tools-20030314.sh 最後一行加入一空行
參考網頁:點我觀看
存檔後再執行arm-elf-tools-20030314.sh:
sudo ./arm-elf-tools-20030314.sh
Toolchains都設定好後:
cd /usr/src/uClinux-dist (µCLinux Source Code所在路徑)
make menuconfig (進入文字選單設定介面)
(或是可用:make config - 純文字條列式設定介面、make xconfig - 圖形化設定介面)
在選單中選擇Vendor/Product Selection ---> 來選擇所需要的硬體平台
--- Select the Vendor you wish to target
在此選擇GDB
--- Select the Product you wish to target
在此選擇ARMulator
在選單中選擇 Kenel/Library/Defaults Selection ---> 來設定其他編譯Kernel的相關設定
(Kernel Version 在此使用:linux-2.6.x、Libc Version使用:uClibc)
都設定完成後按x
並在離開的時候選擇
完成後便可開始編譯核心,輸入:
make dep
make
若在編譯過程中出現缺少genromfs相關檔案的錯誤訊息
可以至此網頁下載:genromfs - ROM FileSystem Generation Utility
至於安裝方式就依照網頁說明安裝即可重新執行make指令編譯核心
核心編譯成功後
在images資料夾下會有以下
首先進入到µCLinux所在路徑:
cd /usr/src/uClinux-dist/
建立images資料夾中,boot.rom檔案的連結:
ln -s images/boot.rom boot.rom
arm-elf-gdb -n linux-2.6.x/linux (在此可根據所安裝的核心更換路徑)
若在此出現:
arm-elf-gdb: error while loading shared libraries: libncurses.so.4: cannot open shared object file: No such file or directory ... 的錯誤訊息時
則需在/usr/lib中建立連結到/lib/libncurses.so.5的
cd /usr/lib
ln -s ../../lib/libncurses.so.5 libncurses.so.4
另外若要執行GDB,還需要有libgtk這個Library
安裝gtk+套件:
sudo yum install gtk+
完成後再次執行:
成功執行後依照以下指令依序執行即可:
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
.........
..................
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf".....................
(gdb) target sim
Loaded ROM boot.rom
Loaded ROM boot.rom
Loaded ROM boot.rom
Loaded ROM boot.rom
Connected to the simulator.
(gdb) loadLoading section .text, size 0x77b84 vma 0x2000000
Loading section .rodata, size 0x8ddb vma 0x2077b84
Loading section .data, size 0x8fc8 vma 0x2080a60
Start address 0x2000000
Transfer rate: 4507960 bits in <1>
(gdb) run1>
........
........
........
到此µClinux核心編譯便告一段落...
經過一番折騰總算是把µClinux給編譯完了
(每次剛解決了一個Error可能下一秒又會再跑出另一個Error... Orz)
不過目前還不知道要怎麼在上面寫程式
也沒有評估板可以把寫好的程式porting到上面
甚至未來還有沒有機會繼續朝這領域發展都還是個未知數~
雖然聽同學和一個博班的學長說老師今年有可能會將OS這塊納入研究領域
(這也是我會選擇這間Lab的原因啊!!! >M<")
不過在老師還沒返國前一切都還是個謎...
希望以後還能有機會繼續朝這方向發展嚕~~~ XDDD
參考網頁:
uClinux™ -- Embedded Linux Microcontroller Project -- Home Page
Getting started with uClinux
歡迎來到 Jollen 的網站 :: uClinux distribution 使用教學
uClinux - Setting up the Development Environment
linux下安裝arm-linux-gcc - Linux教程
fedora 下安裝arm-elf-tools-20030314.sh 的問題-Linux