Wednesday, March 30, 2011

Embedded System 修課紀錄(3)

話說研究室的同學在資工系電腦教師都會有陰影,在現場 Make 不過,回自己 Lab 重新編譯就順的跟超人一樣快。這次的實驗課程是延續上次的修課紀錄(3)燒板子,簡單的描述本次流程: 重新編譯 Linux Kernel,並且利用 U-Boot 將 Linux Kernel 燒到板子上,要注意的部分是: 記憶體位址,以及編譯工具和欲重編的驅動程式準備。

要重編那些東西?

根據廠商給的 CMOS 和 LCD Driver 要把它納入 Linux 核心中,因此驗證也是確認板子的周邊硬體(LCD, Camera)是否能夠正常運作,有感光即可。

認識 Linux Kernel

Linux-x.y.z.w,大致上先了解後面那串數字所代表的涵義即可。x: <主版本>, y: <次版本>, z: <修正版本>, w: <附版本>,廠商給的檔案室 linux-2.6.15.3-creator-pxa270.patch。

環境準備

將檔案都放置於 /home/sn/lab4_project/ 之中,因此解壓縮下來的話,會有 Toolchain 目錄,以及其他要編譯的驅動程式和 Kernel 檔案。

重新編譯 Linux Kernel
  • 安裝 Toolchain 工具
第一次編寫程式是在 Windows 上面安裝 Cygwin 所以是用 arm-elf-tools-cygwin.tar.gz,這次是在 Ubuntu 8.04 底下,所以要用檔案 arm-linux-toolchain-bin.4.0.2.tar.gz 來協助編譯。

tar -zxvf arm-linux-toolchain-bin.4.0.2.tar.gz
  • 加入環境變數
/home/sn/lab4_project//opt/microtime/pro/devkit/arm/pxa270/gcc-4.0.2-glibc-2.3.3/arm-unknown-linux-gnu/bin/:$PATH
真的有點長...
  • 核心和驅動程式解壓縮
// 解壓縮linuxkernelsource
tar -zxvfmt-linux-2.6.15.3.tar.gz
// 解壓縮我們要掛載的kernel module到對應的路徑
tar -zxvfCreator_PXA270_LCD_Device_Driver.src.tar.gz
tar -zxvfCreator_PXA270_CMOS_Device_Driver.src.tar.gz
  • Patch
根據 linux-2.6.15.3 所做的【補丁】,以下檔案是廠商給的。
cp linux-2.6.15.3-creator-pxa270.patch microtime/pro/devkit/lsp/create-pxa270/
cd…/microtime/pro/devkit/lsp/create-pxa270
patch -p0 < linux-2.6.15.3-creator-pxa270.patch
Menuconfig 到前一步驟所解開的檔案目錄之下做編譯。
cd…/microtime/linux

// 主要的目的在清除不穩定目的檔(.o),確保核心重編時順利成功
make mrproper

// 自動填完make config所問的項目,預設不掛載周邊所有Devices的kernel module
make creator_pxa270_defconfig

// 目前最常用的文字界面的選單模式
make menuconfig
勾選我們要編譯的資訊,[character] -> [devices] -> (M)CMOS, (M)LCD 產生 uImage
make clean
// 編譯 zImag 以及 LCD, CMOS Kernel Module
make

// 編譯 uImage
make uImage
補充 zImage 在 /microtime/linux/drivers/char 的 creator-pxa270-cmos.ko 與 creator-pxa270-lcd.ko;uImage 在 /microtime/linux/arch/arm/boot。 到這一步驟已經完成編譯 Linux Kernel 成為 uImage 了。

將 Linux Kernel 燒到板子 

第一件重要的事情是,開發板上面要已經把 U-Boot 燒進去(?),這步驟是前一次的實驗課程。 操作過程

1. 設定環境
uboot> setenv ipaddr 192.168.0.100
uboot> setenv serverip 192.168.0.10
uboot> saveenv
2. 透過 TFTP 下載uImage
uboot> tftp a1100000 uImage
uboot> protect off 100000 47ffff
3. 解除 ROM 保護
protect off 100000 47ffff
4. 清除 ROM 資料
erase 100000 47ffff
5. 燒綠 ROM
cp.ba1100000 100000 200000
燒錄 Linux Kernel 完成!! 驗證成效 1. 進入 U-Boot 執行 bootcmd run linux 指令 使得 U-Boot 於啟動時可以自動運行 Linux,記得並且saveenv 將設定儲存 2. 找到先前編得出來的兩個檔案,並且載入
insmodcreator-pxa270-cmos.ko
insmodcreator-pxa270-lcd.ko
3. 執行周邊驅動的程式
./creator-pxa270-demo
Reference

[1.] 楊教授課程授課資料

No comments:

Post a Comment