這裡純粹紀錄做過的事情,不保證一定成功。
環境準備:
首先,先Google STLinux 下載2.3的ISO,另外我的電腦是跑Ubuntu,必須使用更新的install script。把下載的ISO解開複製到某個目錄內,把install用剛剛下載的新版檔案蓋掉。
先用apt-get安裝rpm套件,再切換到superuser啟動 install script。安裝後的內容會放在 /opt/STM/STLinux-2.3 裡面。
先到 host/bin 內執行 stmyum update 升級安裝,這樣就會取得最新的 kernel 2.6.23.17 source 與更新後的套件,由於網樂通剛好用相同版號的kernel,剛好省下了自己找kernel的麻煩。
設定環境:
將適當的PATH加入環境變數中,這樣make才找得到STLinux的toolchain。
然後,複製STLinux的source tree到自己的working directory,就可以開始工作了。
Start working:
我們要先找出正確的平台組態,所以先看看目前的 kernel支援哪些平台:
make ARCH=sh CROSS_COMPILE=sh4-linux- help
在Architecture specific targets中,找到了符合網樂通平台的pdk7105,所以直接下pdk7105_defconfig就可以產生可用的.config文件:
make ARCH=sh CROSS_COMPILE=sh4-linux- pdk7105_defconfig
接下來,就可以修改核心選項,加入我要的RT73無線網卡Driver(跟一堆東西):
make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig
然後編譯kernel:
make ARCH=sh CROSS_COMPILE=sh4-linux- vmlinux
有四核心的電腦,下編譯指令時加上 -j4可以節省編譯時間。
開機測試:
首先,我們要先確定網樂通的硬體配置為何,這可以很簡單的透過u-boot輸出訊息取得:
## Booting image at 80000000 ...
Image Name: Linux 2.6
Image Type: SuperH Linux Kernel Image (gzip compressed)
Data Size: 2459057 Bytes = 2.3 MiB
Load Address: 80800000
Entry Point: 80801000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
CMDLen=169
There is "hwaddr" keywords! Position=95
Read MacAddr=24cf21b0ab14
[iptv_kernel]:Starting kernel console=ttyAS0,115200 root=8:2 rootfstype=ext3 rw rootflags=data=journal nwhwconf=device:eth0,hwaddr:24:cf:21:b0:ab:14 phyaddr:0,watchdog:5000 mem=120M bigphysarea=2048 - 0x00000000 - 0 ...
其中,Load Address跟Execute Address(即Entry Point)要記下來,等下會用到。
另外,也可以下pri指令,就可以發現u-boot其實是讀入隨身碟的第二磁區根目錄內的vmlinux.ub來開機。
PDK7105> pri
bootdelay=0
baudrate=115200
ethaddr=DE:EA:FF:FF:01:01
board=pdk7105
monitor_base=0xA4000000
monitor_len=0x00040000
monitor_sec=1:0-1
load_addr=0x80000000
ipaddr=192.9.150.61
serverip=192.9.150.67
bootdelay=0
update_uboot=usb start;fatload usb 0 80000000 u-boot.bin;update_spi_uboot
unprot=protect off $monitor_sec
update=erase $monitor_sec;cp.b $load_addr $monitor_base $monitor_len;protect on $monitor_sec
ethaddr=12:34:56:78:06:BD
stdin=serial
stdout=serial
stderr=serial
bootargs=console=ttyAS0,115200 root=8:2 rootfstype=ext3 rw rootflags=data=journal nwhwconf=device:eth0,hwaddr:10:08:E2:12:06:BD phyaddr:0,watchdog:5000 mem=120M bigphysarea=2048
bootcmd=ext2load usb 0:2 80000000 vmlinux.ub; bootm 80000000
Environment size: 715/65532 bytes
所以如果要做一個相容核心的話,我們還要做一些指令,讓核心變成可以在網樂通上開機的vmlinux.ub:
sh4-linux-objcopy -O binary vmlinux vmlinux.bin
gzip --best --force vmlinux.bin
mkimage -A sh -O linux -T kernel -C gzip -a 0x80800000 -e 0x80801000 -n "Linux 2.6" -d vmlinux.bin.gz vmlinux.ub
其中,-a 跟 -e 後面的選項就是剛剛開機訊息裡面提到的Load Address跟Execute Address實際位址。
在不修改任何設定值的情況下,編譯好的kernel只有1.7MB,跟網樂通內附的kernel有很大差距。不過只要編譯過的kernel可以動就好,畢竟我的重點是編譯Wifi Driver Module。
- Feb 14 Mon 2011 16:41
編譯網樂通專用 Kernel
close
全站熱搜
留言列表
發表留言