2012年8月29日 星期三

(轉)STLinux 平台報告

一、 開發板介紹
Sti7109 開發板是一款參考STB7100設計的,用於機頂盒的開發板。開發板的標識為mb442,網絡接口包含一個名為STMMAC的MAC以及STE100P的 PHY,串口部分包括2個ASC類型的串口,設備名分別為/dev/ttyAS0和/dev/ttyAS1,存儲設備包括一個8MB的flash和一個 32MB的DRAM,內存地址分配如下表所示:
FLASH (1)
RAM (2)
boot code
boot env
memory start
boot  base
0xA0000000-0xA001FFFF
0xA0020000-0xA002FFFF
0x84000000
0x85F00000
boot 代碼保存於flash的零地址開始處,boot環境變量保存於0xa0040000開始處,開發板上電後,將從flash零地址處開始啟動,將代碼解壓至 0x85f00000處,然後再跳至0x85f00000處繼續運行,因此在燒寫內核時,最好把內核燒寫在0xa0030000地址以外。
二、 軟件安裝
1、下載軟件包
從網站上下載STLinux-2.3-sh4_uclibc.iso,網址為
ftp://ftp.stlinux.com/pub/stlinux/2.3ear/iso/
2、掛載ISO文件
命令如下:
mount -o loop,ro -t iso9660 -r /home/hsy/STLinux-2.3-sh4_uclibc.iso /media/cdrom
將文件STLinux-2.3-sh4_uclibc.iso掛載至/media/cdrom
3、安裝
以root用戶安裝
[root@pc007 ~]#cd /media/cdrom
[root@pc007 cdrom]# ./install all-sh4_uclibc
ST軟件將被安裝至/opt/STM/STLinux-2.3
4、stlinux源代碼
安裝完成後,stlinux源代碼位於
/opt/STM/STLinux-2.3/devkit/sources/kernel/linux-sh4-2.6.23.1_stm23_0102
5、交叉編譯器
軟 件安裝好後,在/opt/STM/STLinux-2.3/devkit/sh4_uclibc/bin目錄裡,會有很多交叉編譯器,諸如: sh4-linux-uclibc-ar、sh4-linux-uclibc-gcc、sh4-linux-uclibc-as、sh4-linux- uclibc-nm、sh4-linux-uclibc-objcopy、sh4-linux-uclibc-ld等等。
需要在主機上對環境變量進行設置,命令如下:
export PATH=$PATH: /opt/STM/STLinux-2.3/devkit/sh4_uclibc/bin
三、 源文件修改
1、boot源代碼修改
/lib_sh4/sh4_linux.c中的函數do_boot_linux中,param = 84001000
修改param的目的是為了使得cmdline在boot中加載地址和linux中讀取cmdline的地址一致
2、stlinux修改
/driver/serial/stasc.c中asc_init_port函數,將rate置為100000000;
/driver/net/stmmac/stmmac_main.c 中增加函數static int set_mac_addr(struct net_device *dev, void *addr);增加此函數是為了dev->set_mac_address = &set_mac_addr時有意義,以備其他函數調用dev->set_mac_address;
/driver/net/stmmac/stmmac_main.c中stmmac_associate_phy函數,裡將plat_dat->phy_addr = 2; 此值與硬件設計相關
四、 編譯步驟
1、編譯內核
進入內核源代碼的根目錄下,並在此目錄下進行編譯
第一步清除所有的配置信息
#make mrproper
第二步生成配置文件
#make ARCH=sh mb442_defconfig
第三步修改配置文件
打開配置文件 vi .config
修改配置文件,註釋掉CONFIG_SMS91x,將CONFIG_STMMAC_ETH設置為所支持的設備,內容如下:
# CONFIG_STNIC is not set
# CONFIG_SMSC911x is not set
# CONFIG_SMC91X is not set
CONFIG_NETDEV_1000=y
CONFIG_STMMAC_ETH=y
第四步編譯內核
#make ARCH=sh CROSS_COMPILE=sh4-linux-uclibc- V=1
第五步製作image文件
該步驟完成之後,會在arch/sh/boot下生成zImage
利用zImage來製作可以運行在開發板的image文件
#cp –a arch/sh/boot/zImage /tftpboot
#cd tftpboot
#gzip -9 zImage
#mkimage -A sh4 -O linux -T kernel -C gzip -a 0x84800000 -e 0x84800000 -n 「 linux2.6」 -d zImage.gz vmlinux.ub
參數說明
-A
設置體系結構類型
-O
設置操作系統類型
-T
設置image類型
-C
[i]設置壓縮類型
-a
設置加載地址
-e
設置入口地址
-n
Image命名設置
-d
Image數據來源
2、編譯iboot
#cd iboot/build
#iConfig.exe cosmic668
#cd compile.cosmic668
#make depend
#make
完成之後,在iboot/build/compile.cosmic668目錄下生成iboot.bin
五、 boot介紹
給sti7109板上電後,在控制台上出現命令提示符。sti7109 板的標準輸
入、標準輸出重定位到串口。串口連接到調試主機(Host)上,調試主機是
windows 工作台,採用Windows 超級終端(如果調試主機是Linux 服務器,採用
MiniCOM)。串口的連接設置為:波特率115200,數據位8,奇偶校驗無,停止位
流控無。
1、boot的啟動
供電後,iboot將自動啟動,在其終端輸出如下內容:
Boot 0.1.0 (May 18 2008 - 19:36:10)
DRAM: 32 MB
CFI:20:22fd:800000
In: serial
Out: serial
Err: serial
Net: Using MAC Address 48:59:48:45:FF:FF
phy[2:1c04:11]: STE100P found
Hit any key to stop autoboot: 2
2、進入boot模式
若在boot啟動2秒鐘之內按任意鍵,將終止自動啟動,串口輸出如下內容:
=== boot menu (NET) ===
b) update boot
k) update kernel
d) update data
s) switch between NET and CON
q) quit to iBoot mode
r) reset
Please input:
輸入q,將進入iboot模式,串口輸出如下所示:
Boot#
3、boot常用命令
在boot模式下,輸入help或者字符『?』,再輸入回車後,boot將打印出所有的命令,以及個命令的含義。
4、boot的升級
如果需要升級boot,首先將編譯好的boot.bin文件複製到tftp服務器的目錄中,然後將開發板復位,進入boot menu模式,按照選項提示,輸入字符』b',並按回車鍵即可完成升級。
六、 NFS文件系統
1、NFS配置文件
修改NFS的配置文件,位於根目錄下 /etc 目錄中,文件名為exports。
打開文件exports:
#vi /etc/exports
輸入如下語句:
/tmp/target *(rw,no_root_squash,async)
意思是將本機上的/tmp/target文件夾設置為nfs的根目錄,*代表所有客戶,()裡面是配置選項,保存並退出,然後重新啟動nfs即可。
2、啟動NFS服務器
啟動nfs服務器,命令語句如下:
#service portmap start
#service nfs start
#service nfslock start
若要重新啟動,命令語句如下:
#service portmap restart
#service nfs restart
#service nfslock restart
七、 加載linux內核
下面的幾步,需要在iboot運行於開發板後,在iboot的終端界面下做:
1、設置環境變量
#set serverip 192.168.88.107
#set ipaddr 172.16.88.97
#set gatewayip 192.168.88.1
#set netmask 255.255.255.0
#set ethaddr 48:59:48:45:FF:FF
2、加載linux至ram
#tftp 84001000 vmlinux.ub
加載vmlinux.ub至84001000 地址,此地址為ram地址
3、加載linux至flash
#tftp a0080000 vmlinux.ub
加載vmlinux.ub至84001000 地址,此地址為flash地址
4、保存環境變量
#saveenv
八、 運行linux
在boot控制終端上進行設置如下:
1、設置cmdline
#set bootargs 『console ttyAS0,115200 root=/dev/nfs nfsroot=/tmp/target rw ip=172.16.88.97:192.168.88.107:172.16.0.1:255.255.0.0:STi7109:eth0:off mem=64m bigphysarea=6000 coprocessor_mem=4m@0x10000000,4m@0x10400000 nwhwconf=device:eth0,hwaddr:48:59:48:45:aa:bb'
此cmdline僅用於設置內核通過nfs方式啟動
2、環境變量
#bootcmd=bootm A0080000
保存環境變量
#Saveenv
3、啟動linux
若將linux內燒寫至flash,地址與bootcmd的地址一致,在少些完成後,可以直接執行下面的命令啟動linux:
#boot
若將linux內載入至ram中,假設載入的地址為84001000,或者燒寫內核至flash的其他地址中,假設為a0060000,則需要輸入如下名令來啟動linux:
#bootm 84001000
或者
#bootm a0060000

沒有留言:

張貼留言