Professional Documents
Culture Documents
Porting 流程簡介
Building Embedded Linux System 五步驟
必須先建立開發系統
確認目標板
建構開發環境
Building Embedded Linux for Target
燒寫至儲存裝置
開始建構其所需要工具及整個根檔案系統。
Bootloader 介紹
開機第一個執行的開機載入程式,通常並沒有限定要用何種
Bootloader,
Linux Kernel 介紹
主要動作有驅動週邊硬體設備、Network,掛載根檔案系統(Root
Filesystem)等。
其中還包括記憶體管理程式,如分頁等。核心最後一步驟
Root Filesystem 介紹
根檔案系統包含了許多元件,其中包含系統函式庫,裝置節點
檔(device node),系統啓動檔,設定檔,系統應用程式及客製
應用程式等。
2010 NTUST B9702111 林可昀
使用教學
規格介紹
作業系統: Win7
Let’s Start!
A. 安裝 vmware
安裝完成後關機
虛擬機文件在兩個不同版本的虛擬機上不能互用
如何解決
從別人處拷貝的虛擬機往往會出現以下提示錯誤:
出現這樣的錯誤怎麼解決呢?這種錯誤是版本不一樣造成的,解決辦法只
需要用記事本打開虛擬機目錄下的.vmx 文件,將“virtualHW.version =
"7"”中的“=”後邊的數字改為你現在使用的虛擬機的版本號即可。
語言支援檔不足,解決辦法如下:連上網路,update 支援檔!
語言問題
安裝後,由於語言支援檔不足的問題,畫面大部分都還是英文字。解決方法如下:
1. 點選上方選單的「System->Administration->Language Support」
2. 程式變會幫你偵測你的語言完整度,接著會跳出要讓你下載完整語言的視
窗,此時只要打個密碼,讓它自動下載完後,重新開機即可。
I.
開機完成後
點選 vmware 右下方網路卡圖示(綠色的卡,左鍵點兩下)
2010 NTUST B9702111 林可昀
II.
使用 DHCP 上網,請選擇 bridged。
III.
選擇 AUTO eth0
2010 NTUST B9702111 林可昀
IV.
即可上網!!!
V.
NTUST 無線網路或家裡的 DHCP 無線網路設定都會一起完成
使用 DSL 撥接上網:
2010 NTUST B9702111 林可昀
I.
點選上方選單的「System->Preferences->Network Connections」
II.
選 DSL,再選 Add
III.
2010 NTUST B9702111 林可昀
在設定完成語言和網路後:
並安裝以下檔案到[檔案系統->opt->AT91SAM->linux_src]資料夾內
2010 NTUST B9702111 林可昀
檔案一共四個:清單如下
1 Linux-2.6.22.bar.bz2
2 2.6.22-at91.patch.gz
3 2.6.22-at91-exp.2.patch.gz
4 At91sam9263ek_defconfig
A: 是的,我們必須自己建立這個資料夾
如何建立資料夾?(透過終端機)
首先介紹常用檔案管理指令
cd 變換目錄
pwd 顯示目前位置
mkdir 建立資料夾
rmdir 刪除空資料夾
指令說明:
cd 是 change directory 的縮寫,用來變換工作路徑的指令。
cd .. 回到上一層
cd fish 進入 fish 資料夾
cd /usr/sbin 使用絕對路徑方式
此時你可能會遇到這個狀況:
2010 NTUST B9702111 林可昀
是使用者權限不足的問題。難不成是我沒權限嗎?可是明明從安裝到現在又沒輸
入 root 的密碼,只有設定第一個使用者的帳號跟密碼阿!那 root 的密碼是啥?
解決方案如下:
使用者身份切換
以我的例子來說,我是用 kevin 登入。以 su 的指令直接將身份變成 root 即可,
但是這個指令卻需要 root 的密碼,也就是說,如果你要以 su 變成 root 的話,
你的一般使用者 kevin 就必須要有 root 的密碼才行;
再修改過密碼之後,我們將進行兩個步驟:
輸入 su - 套入環境參數,如果沒更新環境參數,那你依然不能刪增資料夾!
Q: 如何安裝這些檔案
A:
這些檔案是 LINUX 的壓縮檔,我們必須用壓縮檔的指令讀取檔案
壓縮檔的副檔名如下:
.bz2 bzip2 壓縮檔
.gz gzip 壓縮檔
.tar Tar 程式打包的資料,並沒壓縮過
.tar.gz Tar 程式打包,並經過 gzip 的壓縮
.Z Compress 程式壓縮檔
參數說明:
-d :解壓縮的參數!
-# :壓縮等級, 1 最不好, 9 最好, 6 是預設值!
gzip man.config 產生 man.config.gz 這個檔案
gzip -d man.config.gz 解壓縮,產生 man.config 這個
gunzip man.config.gz 檔案
gzip -9 man.config 以最大壓縮比壓縮 testing 這
個檔案
zcat man.config.gz 讀取出 man.config 的內容
tar 的選項與參數非常的多!請參考鳥哥
其他後續練習會使用到的選項介紹:
-p :保留備份資料的原本權限與屬性,常用於備份(-c)重要的設定檔
-P :保留絕對路徑,亦即允許備份資料中含有根目錄存在之意;
--exclude=FILE:在壓縮的過程中,不要將 FILE 打包!
我的整理:
壓 縮 tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱
tar -cvf bird.tar bird 將目錄轉成一個檔案,沒有壓縮
tar -zcvf bird.tar.gz bird
壓縮一整個目錄成為 .tar.gz 檔案
解壓縮 tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄
tar -xvf bird.tar
tar -zxvf bird.tar.gz
2010 NTUST B9702111 林可昀
Q:What is patch?
A:
patch 即 修補程式:
是透過更新電腦程式或支援檔案,用來修補軟體問題的資料程式。包括像是修
正漏洞、臭蟲、改善易用性或效能等。然而,設計不良的修補程式可能帶來新的
問題。patch 的等義翻譯名稱有補丁、修補程式、修補檔、升級程式、升級檔等。
Apt-get 指令適用於安裝補丁、套件。由於下載完的檔案不會存到硬碟,不建
議用此方式安裝大型軟體。
2010 NTUST B9702111 林可昀
安裝
在終端機裡輸入:
移除
在終端機裡輸入:
升級
在終端機裡輸入:
apt-get update
這樣系統會自動由 Ubuntu 對映點更新套件列表,如果想安裝最新套件,必須先
執行一次。每次修改了 /etc/apt/sources.list 後,也必須執行一次。
在終端機裡輸入:
在終端機裡輸入:
G. 安裝 GCC
確認你已經完成以下三個指令
#:tar jxvf /opt/AT91SAM/linux_src/linux-2.6.22.tar.bz2
#: zcat /opt/AT91SAM/linux_src/linux-2.6.22/2.6.22-at91.patch.gz | patch -p1
#: zcat /opt/AT91SAM/linux_src/linux-2.6.22/2.6.22-at91-exp.2.patch.gz | patch
-p1
接下來開始安裝交叉編譯器
交叉编译器使用 CodeSourcery 提供的符合 EABI 標準的
arm-none-linux-gnueabi-gcc-4.3.3 交叉編譯器,下載地址:
http://www.codesourcery.com/sgpp/lite/arm/portal/package4571/public/arm-none-linu
x-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
1)下載後,解壓到/opt/目錄:
# tar jxvf arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/
2)輸出交叉編譯器的可執行文件的路徑到 PATH 環境變數:
# export PATH=/opt/arm-2009q1/bin:$PATH
原 makefile 如上 修改後如下
2010 NTUST B9702111 林可昀
Q:What is MAKE?
A:
無論是在 Linux 還是在 Unix 環境中,make 都是一個非常重要的編譯指令。
不管是自己進行項目開發還是安裝應用軟體,我們都經常要用到 make 或 make
install。利用 make 工具,我們可以將大型的開發項目分解成為多個更易於管
理的模組,對於一個包括幾百個源文件的應用程式,使用 make 和 makefile 工
具就可以簡潔明快地理順各個源文件之間紛繁複雜的相互關係。
2010 NTUST B9702111 林可昀
安裝完後對at91sam9263ek_defconfig執行編譯
#:make at91sam9263ek_defconfig 註:at91sam9263ek_defconfig為版子的基本設定
其他的各種功能勾選,詳見下一步驟
Kernel features
Boot options
2010 NTUST B9702111 林可昀
改成:
Mem=64M console=ttyS0,115200 initrd=0x21100000,20000000
root=/dev/mtdblock0 rw init=/sbin/init
Networking
1. networking option
2010 NTUST B9702111 林可昀
2. Wireless
Device driver
Memory technology device (mtd) support Ram/ rom /flash chip drivers
Device driver Memory technology device (mtd) support mapping driver for chip
access
Logo configuration →
File systems
2010 NTUST B9702111 林可昀
其餘選項皆與預設相同!!
Panic :死當
2. 特別注意關於 filesystem NFS 的設定是否開啟。對嵌入式 linux 系統
而言,目標系統可使用 NFS 協定從 NFS 伺服器來掛載根目錄檔案
系統。在此我們實驗版即是使用 NFS 掛載,如上圖 No NFS server
available,導致 kernel 開啟失敗。因此推斷 NFS 必須有正確的組態
設定。
Q:What is NFS?
A: NFS 是 Network File System。NFS 就好像是 UNIX 系統中的網路芳鄰,
您可以使用 NFS 將伺服器上的資料夾匯出,讓其他 UNIX 主機可以將所匯出的
資料夾掛入。當您有多台 UNIX 主機時,使用 NFS 可以讓您共享同一個資料夾。
2010 NTUST B9702111 林可昀
4. 還有一個重點。Mount(掛載)命令使用唯讀選項(read only)。所謂的
ext2 影像檔正好非常適用在唯讀的目的。不過 mtdblock 驅動程式不
支援 ext2。因為 ext2 無法處理快閃記憶體的抹除區塊。我們必須使
用可存取快閃記憶體的檔案系統,像是 JFFS2 就是一種以快閃記憶
體為基礎的檔案系統。所以說,有關 JFFS2 的功能設定也是非常重
要。如果設定錯誤,可能導致無法讀取 EXT2 檔、實驗版同樣無法
進入 LINUX 系統。
Q: What is 抹除區塊?
A: 快閃記憶體有一種限制,即使它可以單一位元組的方式讀或寫入,但是抹
除一定是一整個區塊
記得存檔 如下圖
2010 NTUST B9702111 林可昀
Make 完成,如上
此時會產生三個新檔案:
我們要燒錄到目標板的二進制内核鏡像文件 zImage
檔案位置:opt/at91sam/linux_src/linux-2.6.22/arch/arm/boot/
Q:What is kernel?
A:
kernel 是作業系統的核心元件,負責處理應用程式和硬體之間的溝通。在 Linux
系統中 kernel 是主要組成部分,它的功能幾乎表示整個系統的功能,它支援全部
系統裝置、S/W 協定和整個系統管理,然而有限記憶體空間不能允許我們把全
部的 kernel 功能放入系統內,幸好 GCC 提供一種聰明的編譯方法來建立必要的
功能,如果在編譯之前,不要選取不需要的項目,便會將這些項目忽略而不進行
編譯。Linux kernel 支援很多種不同的處理器,因應不同需求的平台,必須選擇
相對應的版本。
Q:What is vmlinux?
A:
Vmlinux 是核心的本尊,格式 ELE(二進位檔案的業界標準格式),包含符號、
註解、除錯訊息,以及所有架構皆共同的元件。
vmlinuz 是可引導的、壓縮的內核。“vm”代表“Virtual Memory”。Linux 支
持虛擬內存,不像老的操作系統比如 DOS 有 640KB 內存的限制。Linux 能夠
使用硬盤空間作為虛擬內存,因此得名“vm”。vmlinuz 是可執行的 Linux 內核,
它位於/boot/vmlinuz。
Q:What is System.map?
A:
System.map 用中文解釋就是 核心符號表
在進行程序設計時,會命名一些變量名或函數名之類的符號。Linux 核心是一個
很複雜的代碼塊,有許許多多的全局符號。
System.map 是存在於你的文件系統上的實際文件。當你編譯一個新核心時,
各個符號名的地址要發生變化,你的舊 System.map 具有的是錯誤的符號信
息。每次核心編譯時產生一個新的 System.map,你應當用新的 System.map
來取代舊的 System.map。
雖然核心本身並不真正使用 System.map,但其它程序比如 klogd, lsof 和
ps 等軟件需要一個正確的 System.map。另外少數驅動需要 System.map 來
解析符號,沒有為你當前運行的特定核心創建的 System.map 它們就不能正常
工作。
Q:What is zImage?
A:
kernel 的起始點有分兩種, 一種是沒有壓縮過的 vmlinux, 另外一種就是
zImage。zImage 提供開機載入程式下載的最終合成核心影像檔
2010 NTUST B9702111 林可昀
O. 製做 image 檔
在 cd /opt/AT91SAM/linux_src/linux-2.6.22
輸入指令 #:mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000
\-n linux-2.6 -d arch/arm/boot/zImage linux-2.6.22-uImage
或直接輸入: #:make uImage
如果遇到下圖這狀況
就依照指示安裝
2010 NTUST B9702111 林可昀
看到上圖的畫面,表示你已經完成 uImage 檔。
如下圖: 檔案位置:opt/at91sam/linux_src/linux-2.6.22/arch/arm/boot/
-O 指定操作系統類型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、
ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定映像類型,可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
2010 NTUST B9702111 林可昀
-a 指定映像在記憶體中的載入地址,映像下載到記憶體時,要按照用 mkimage
製作映像時,這個參數所指定的地址值來下載
-C 指定映像壓縮方式,可以取以下值:
none 不壓縮
gzip 用 gzip 的壓縮方式
bzip2 用 bzip2 的壓縮方式
-e 指定映像運行的入口點地址
-n 指定映像檔名
-d 指定製作映像的源文件
P. 連接板子
安裝完畢先重新開機,再到裝置管理員檢查:
應該會有兩個 USB Serial Port(COMXX)
2010 NTUST B9702111 林可昀
使用 PUTTY 連上版子
選 Serial speed:115200 Serial line: COMXX (依電腦不同) OPEN
Q: What is Busybox?
A:
Busybox 是一套常被嵌入式系統使用的程式,它主要的功能是提供了各種常用的
指令來操作系統,並且將所有指令包成一個執行檔,因為他的各項指令經過改
寫,編譯出來的執行檔大小會較一般 Linux 上使用的指令來得小,很適合在嵌
入式系統這種資源有限的情況下使用。
包含了許多 UNIX 微小版公用程式,其中包含了 fileutils、shellutils 及
loginutils 等。
所有公用程式都是連結檔,連結至單一執行檔 Busybox,此檔案只有數百
k 大小。
2010 NTUST B9702111 林可昀
Q:What is mknod?
A:
/dev 裡所放置的是裝置檔,必須先建構。建立裝置檔案有時候系統裡沒有幫你
預先建立 某些裝置的對應檔案時,可以透過 mknod 指令自己建立。但是對應
的編號、類型可是有固定的。
進入 busybox/install/dev 中,輸入以下指令,建立裝置檔。
請注意這個部分,以下指令要確實輸入! 否則會導致缺少裝置、無法開機!
mknod fb0 c 29 0
mknod null c 1 3
mknod ram0 b 1 0
2010 NTUST B9702111 林可昀
mknod tty c 5 0
mknod tty0 c 4 0
mknod sda b 8 0
mknod sda1 b 8 1
mknod sda2 b 8 2
mknod sdb b 8 16
mknod sdb1 b 8 17
mknod sdb2 b 8 18
mknod dsp c 14 3
mknod ttyS0 c 4 64
chmod 644 ttyS0
ln -s ttyS0 console
基本裝置節點檔
mem
實體記憶體存取
類型 字元 主編號 1 次編號 1 權限 600
null
Null 裝置,進入此裝置即會成無形。
zero
random
亂數產生器
tty0
現在的虛擬操控台
tty1
第一個虛擬操控台
2010 NTUST B9702111 林可昀
ttyS0
tty
現行的 TTY 裝置
console
系統控制台
編譯完成會如同上圖
Install 完成如上圖!
然後去確認 install/bin 資料夾內是否安裝好 Busybox 指令,如下圖
Q: What is bashrc?
A:
登入 Linux 的 console 操作環境後,會出現一個提示符號,在這個提示符號之
後可以輸入指令,Linux 根據輸入的指令會做回應,這一連串的動作是由一個所
謂的 Shell 來做處理。 Shell 是一個程式,最常用的就是 Bash,這也是登入
系統預設會使用的 Shell。 profile 與 bashrc 都是 Shell 的啟動設定檔,角色
2010 NTUST B9702111 林可昀
類 MicrosoftDOS/Windows 下的 autoexec.bat 檔案
1.bashrc
系統啟動後就會自動執行。
2.profile
用戶登入後才會執行。
修改如上圖
存檔後,我們要重新啟動.bashrc 檔,才能套入剛才的新設定
#source ~/.bashrc
指令輸入後,立即重新啟動。如上圖
到install/bin下,輸入下列指令,檢查Busybox會使用到哪些函式庫
#arm-none-linux-gnueabi-objdump busybox –p
你可能會遇到下圖的狀況
2010 NTUST B9702111 林可昀
如果遇到此狀況
請改輸入#arm-none-linux-gnueabi-objdump –p busybox
輸入完指令後,會得到以下結果 (如上圖)
required from libm.so.6:
0x0d696914 0x00 03 GLIBC_2.4
required from libc.so.6:
0x0d696914 0x00 02 GLIBC_2.4
private flags = 5000002: [Version5 EABI] [has entry point]
2010 NTUST B9702111 林可昀
#vi fstab
填入內容
#
/dev/ram0 / ext2 defaults 1 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
我們在 linux 中常常用 mount 命令把硬碟分區或者光碟掛載到文件系统中。
/etc/fstab 就是在開機引導的時候自動掛載到 linux 的文件系统。
2010 NTUST B9702111 林可昀
在 install/etc/內建立 inittab
# vi inittab
填入內容
# /etc/inittab
console::sysinit:/etc/rc.d/rc.init
ttyS0::respawn:/bin/sh
Q: /etc/inittab 的功能是甚麼?
A: init process
當 init 啟動時,會讀取系統的組態設定檔/etc/inittab
執行 /etc/rc.d/ 裡的 scripts
將系統由開機狀態 (boot-up state) 切換至多使用者狀態 (multiuser state)
負責載入 tty (本地端) 的 login shell
負責開機與關機的程序 (procedure)。
開機完成後,init 仍會保持在背景執行,並同時監視與修改系統執行狀態。init 監
視許多系統的動作,適時改變系統的狀態,這些動作定義在 /etc/inittab 檔案裡。
# mkdir rc.d
# cd rc.d
# vi rc.init
填入內容
#! /bin/sh
# Set the Path
mount -t proc none /proc
mount -t sysfs none /sys
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export HOME=/home/root
echo “Configuring loopback interface”
ifconfig lo 127.0.0.1
# Start a shell
bin/sh
2010 NTUST B9702111 林可昀
Configure 完畢如上圖
2010 NTUST B9702111 林可昀
# make
Make 指令完成 如上
接著執行指令
# make install
完成!如上圖
2010 NTUST B9702111 林可昀
將實驗板接到電腦
開始搜尋並執行 cmd指令:ipconfig
2010 NTUST B9702111 林可昀
紀錄網卡 IP、MASK、GATEWAY
接著到控制台網路和網際網路檢視網路狀態及工作
2010 NTUST B9702111 林可昀
點選區域網路(紅色圈圈)內容網際網路通訊協定第四版 TCP/IPv4
改成剛才你所記錄的網卡資料
2010 NTUST B9702111 林可昀
這樣就設完區網了
接下來開始用 TFTP
下載 TFTPD32 軟體: http://tftpd32.jounin.net/tftpd32_download.html
解壓縮放到桌面後,將 uImage 和 ext2fs.gz 兩個檔案放到 tftpd32 同一個資料夾
底下
開啟 tftpd32.exe 後,會自動載入檔案資料(下圖)
2010 NTUST B9702111 林可昀
End
2010 NTUST B9702111 林可昀
附錄:
如何將檔案從 VMware 複製到 windows?
兩種方法:
1. Use e-mail such as Yahoo!
2. Use winSCP (better!)
winSCP 教學
壹、 光碟內 Tools 資料夾 WINSCP418 winscp418setup 執行!
建議英文版!有些電腦安裝完簡體中文版,結果出現亂碼….一直按下一步!
2010 NTUST B9702111 林可昀
2010 NTUST B9702111 林可昀
貳、 開啟
會出現上圖畫面!
參、
Tip: 如果嫌麻煩,可以把此設定存起來(save),方便下次使用
2010 NTUST B9702111 林可昀
如果成功連接到 ubuntu,會要求輸入密碼登入,如下圖,
肆、
如果登入成功,即進入下圖畫面。你已經可以在 windows 和 vmware 之間隨意移
動檔案!