XSBASE270 由 WinCE 改為 Linux 記錄
一、準備工作
1.一台Linux 機器,手冊上建議是 FC4 或是 RedHat 9,問題是我去哪裡找這種已經不見的作業系統。
事實上我找到了,結果變成硬體的問題,他要有印表器埠和ComPort,因此我決定姑且一試我目前用
的Linux:
Linux pc.er 2.6.23.15-80.fc7 #1 SMP Sun Feb 10 17:29:10 EST 2008 i686 i686 i386 GNU/Linux
以後這台Linux在此文章中就全稱之為伺服器。
下次要再有只用限定的低版次OS的嵌入系統的話請直接丟了吧。
2. XSBASE270 由兩個部分組成,一個是底版一大片的,以下文章全稱之為「平台」;另一個是平台上面的一個
小小方塊的模組,以下文章全稱之為「模組」。兩者以下合稱為「X系統」。
二、接線
先將 JTAG(彩色的那個扁扁的線) 一邊插到模組上,另一邊接到伺服器的「平行埠」
將序列埠的線一邊接到伺服器上的ComPort,另一邊接到模組上唯一能插進去的ComPort孔。
網路線他有附一條爛爛的,說是交換線,手冊說要由模組接到底板。而我這盒沒此線,因此
自備兩條正常的網路線(Straight Through RJ45)分別由模組、底板接到Switch。
<<以上接線看似容易我研究了很久>>
三、拷背
把光碟片整個Linux/ 目錄下的檔案約700MB拷入伺服器,怎麼拷的手冊是說要mount光碟機,因為我
光碟機沒接線麻煩,所以就拿WindowsXP的NB(下文全稱為筆電)再用FTP傳進去伺服器。過程略!
四、進到目錄 Jflash-XSBase270/
將 boot的影像檔用他提供的 程式jflashm 利用那條 JTAG線傳進去,其中程式jflashm記得改為可執行。
# ./jflashm boot
出現錯誤:
[root@pc Jflash-XSBase270]# ./jflashmm
./jflashmm: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or direc
[root@pc Jflash-XSBase270]# ln -s /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.6
ln: creating symbolic link ‘/usr/lib/libstdc++.so.6’: 檔案已存在
使用老奸步看行不行。
[root@pc Jflash-XSBase270]# ln -s /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.5
再執行,出現另一個錯誤,老奸步不行
[root@pc Jflash-XSBase270]# ./jflashmm: /usr/lib/libstdc++.so.5: version `CXXABI_1.2' not found (required by ./jflashmm)
這因為我的linux是新版的,所以尋找舊版的lib:
下尋找libstdc++.so.5
http://rpmfind.net/linux/rpm2html/search.php?query=libstdc%2B%2B.so.5
安裝
[root@pc Jflash-XSBase270]# rpm -ivh compat-libstdc++-33-3.2.3-62.i386.rpm
正在準備… ########################################### [100%]
1:compat-libstdc++-33 ########################################### [100%]
再執行就ok了
[root@pc Jflash-XSBase270]# ./jflashm boot
五、執行 minicom -s
在伺服器上執行 minicom -s 因為使用Com1,故先行設定device 為/dev/ttyS0,
com的通訊方式為115200 8 N 1 流量控制無後存檔離開再執行一次:
# minicom
開始監聽Com Port1,可按 Ctrl-A 後放開再按Z看使用說明,可按 Ctrl-A 再按X離開。
將X系統重開機,此時在伺服器的畫面上應該會出現選單: 記得在倒數 AUTO BOOT的時候按任意鍵才會出現以下選單,否則找不到 Kernel 會出現 Kernel Panic
Copyright (C) 2002-2006 Hua Heng Co,. Ltd.
Support : http://www.chhnet.com.tw
Version : 01.00.03
flash : base=0x00000000, size=0x02000000
Eth port can access, the base address is 0x0c000300
Eth chip is LAN91C111
autoboot in progress, press any key to stop.
Boot delay 2 seconds ..
autoboot started.
loading kernel image from flash...
loading ramdisk image from flash...
error: kernel is not exists.
autoboot aborted.
============================ Operation Menu ==========================
[0] ComanndLine mode
[1] View current configuration
[2] Bootp
[3] Download default Kernel (zImage_qt)
[4] Flash Kernel
[5] Download default Filesystem (rootfs270qt.img)
[6] Flash Filesystem
[7] Boot system
[8] Reboot system
[9] Reset to factory default configuration
[a] Set default Kernel filename and Filesystem filename
[b] Set boot delay time
[c] Help(to get a list of commands)
======================================================================
Please enter your selection:
這表示成功的將boot植入
六、設定網路參數
因為他的作業系統都要由TFTP傳入,因此要先設定IP,但是因為他無法直接設定IP上去,
所以他採用 bootp的協定取得ip,光碟有附 bootp的rpm,不過試了很久都失敗。他還要
我們裝xinetd,設定boottab等步驟全照作可是完全抓不到 bootp的封包,用WireShark才
找發現根本沒有bootp的 response。這裡一度想放棄,不過最後心一橫,
直接安裝 DHCPD 來解決這個問題,而 X系統也直接能抓到ip了。
由五的選單選0
設定網卡MAC,隨便設定
51Board> set myhaddr 12:34:56:78:9a:00
送出 bootp的request封包
51Board> bootp
my mac address is 12:34:56:78:9A:00
try to send bootp packet.....
failed : bootp packet is not received.
失敗,因為伺服器沒有回應給他bootp的封包
[root@pc etc]# yum install dhcp
.....
Downloading Packages:
(1/2): openldap-servers-2 100% |=========================| 2.3 MB 00:00
(2/2): dhcp-3.0.5-42.fc7. 100% |=========================| 863 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: openldap-servers ######################### [1/2]
Installing: dhcp ######################### [2/2]
Installed: dhcp.i386 12:3.0.5-42.fc7
Dependency Installed: openldap-servers.i386 0:2.3.34-7.fc7
Complete!
將組態檔拷至 /etc
[root@pc etc]# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample ./dhcpd.conf
修改組態檔
[root@pc etc]# vi /etc/dhcpd.conf
ignore client-updates;
subnet 10.200.0.0 netmask 255.255.0.0 {
# --- default gateway
option routers 10.200.8.254;
option subnet-mask 255.255.0.0;
option domain-name-servers 10.200.8.254;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
range dynamic-bootp 10.200.8.100 10.200.8.102;
default-lease-time 21600;
max-lease-time 43200;
# 以下這段指定即可
# 這裡表示 這個mac一定會拿到下面那個ip
host xsbase270 {
hardware ethernet 12:34:56:78:9A:00;
fixed-address 10.200.8.34;
}
}
存檔後啟動
[root@pc etc]# service dhcpd start
正在啟動 dhcpd: [ 確定 ]
重新在方才串列埠上送出 bootp的request封包。順利取得了IP
51Board> bootp
my mac address is 12:34:56:78:9A:00
try to send bootp packet.
reply packet is received from (10.200.8.254)
my ip address is 10.200.8.34
回到選單
51Board> quit
七、安裝tftp server
x系統光碟提供有tftp的程式,不過那個要配合 xinetd使用,不但麻煩,而且設定費時。
因我之前有用另一個tftp server 所以決定用我用習慣的程式,在哪下載的不記得了
因解壓:
[root@pc axer]# tar zxvf tftpserverspV1.4.tar.gz
tftpserversp/
tftpserversp/getServers.cpp
tftpserversp/Licence.txt
tftpserversp/README
tftpserversp/tftpserver
tftpserversp/tftpserver.cpp
tftpserversp/tftpserver.h
tftpserversp/tftpserver.ini
可以直接放到背景去執行
[root@pc tftpserversp]# ./tftpserver
或是加 -v 的參數觀察執行情況
[root@pc tftpserversp]# ./tftpserver -v
starting TFTP...
alias / is mapped to /home/
listening On: 127.0.0.1:69
listening On: 10.200.8.254:69
listening On: 210.240.196.46:69
listening On: 192.168.122.1:69
permitted clients: all
max blksize: 65464
defult blksize: 512
default interval: 3
overwrite existing files: No
Accepting requests..
八、放至要拷給x系統的檔案---並下載Linux 核心
[root@pc TinyX]# cp xsbase270/Images/TinyX/zImage_EDR_tinyx tftpserversp的目錄
拷背…失敗
51Board> tftp zImage_EDR_tinyx kernel
tftp start...
my ip address : 10.200.8.34
server ip address : 10.200.8.254
filename : zImage_EDR_tinyx
store at : 0xA0008000
loading start...
error : 'File Not Found' (1)
拷背 tftpserver.ini 到 /etc
編輯
vi /etc/tftpserver.ini
將 '/home/ 前的 ' 拿掉再啟動。
將要上傳的檔放到 /home/
再執行以下指令下載Linux 核心:
51Board> tftp zImage_EDR_tinyx kernel
tftp start...
my ip address : 10.200.8.34
server ip address : 10.200.8.254
filename : zImage_EDR_tinyx
store at : 0xA0008000
loading start...
1122540 (0x001120EC) bytes received. done.
下載成功
執行燒寫到 flash
51Board> flash kernel
erase at 0x00040000~0x0017ffff : done.
write at 0x00040000~0x001520eb with 0xa0008000 : done.
編譯檔案系統
到xsbase270/Filesystem 下,解壓 rootfs270_tinyx.tar.gz
mkfs.jffs2, rootfs270.sh 修改權限為755
執行
# sh rootfs270.sh
預設會產生一個檔 rootfs270.img,將此檔改名zfs270並放到 tftp 的目錄下。
下載Linux 檔案系統
51Board> tftp zfs270 root
tftp start...
my ip address : 10.200.8.34
server ip address : 10.200.8.254
filename : zfs270
store at : 0xA0000000
loading start...
2359296 (0x00240000) bytes received. error : timed out.
<<逾時錯誤?檔案只有23mb>>只好重試一次,還是失敗,一直失敗,傳到一半就停止了。
九、編譯內核
到伺服器中,先將光碟附的內核解壓:
# cd xsbase270/Kernel
# tar zxvf linux-2.4.21-51Board_EDR.tar.gz
# cd linux-2.4.21-51Board_EDR
# make xsbase270_config
# make oldconfig
建立目錄選單
[root@pc linux-2.4.21-51Board_EDR]# make menuconfig
rm -f include/asm
( cd include ; ln -sf asm-arm asm)
make -C scripts/lxdialog all
make[1]: Entering directory `/home/axer/xsbase270/Kernel/linux-2.4.21-51Board_EDR/scripts/lxdialog'
/usr/bin/ld: cannot find -lncurses
collect2: ld 回傳 1
>> Unable to find the Ncurses libraries.
>>
>> You must have Ncurses installed in order
>> to use 'make menuconfig'
make[1]: *** [ncurses] Error 1
make[1]: Leaving directory `/home/axer/xsbase270/Kernel/linux-2.4.21-51Board_EDR/scripts/lxdialog'
make: *** [menuconfig] Error 2
出錯…?
十、下載 ncurses-devel
ftp://ftp.isu.edu.tw/pub/Linux/Fedora/linux/updates/7/x86_64/ncurses-devel-5.6-9.20070812.fc7.i386.rpm
並安裝此rpm 後再執行
[root@pc linux-2.4.21-51Board_EDR]# make menuconfig
切成 big5的編碼以免視窗破損
出現要編譯進內核的選單
我有修改的地方,其餘的用預設的。
System Type --->
Intel PXA270/250/210 Implementations --->
(XSBase270-EDR) XSBase270 Board Type
File systems --->
Kernel automounter support
/dev file system support (EXPERIMENTAL)
Automatically mount at boot
Debug devfs
Multimedia Capabilities Port drivers --->
---> (Tinyx) GUI to be supported
---> (X) Tinyx
結束後儲存。
*** End of Linux kernel configuration.
*** Check the top-level Makefile for additional configuration.
*** Next, you may run 'make bzImage', 'make bzdisk', or 'make install'.
建立檔案的相關性:
[root@pc linux-2.4.21-51Board_EDR]# make dep
編譯內核:
[root@pc linux-2.4.21-51Board_EDR]# make bzImage
出錯:
make: /opt/xscalev1/bin/arm-linux-gcc: Command not found
make: *** [init/main.o] Error 127
十一、嘗試安裝 arm-linux-gcc
[root@pc linux-2.4.21-51Board_EDR]# yum install arm-*
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
arm-gp2x-linux-SDL noarch 1.2.9-4.fc7 updates 817 k
arm-gp2x-linux-gcc-c++ i386 4.1.2-6.fc7 updates 5.2 M
arm-gp2x-linux-zlib noarch 1.2.3-6.fc7 updates 209 k
Installing for dependencies:
arm-gp2x-linux-binutils i386 2.16.1-2.fc7 updates 3.1 M
arm-gp2x-linux-gcc i386 4.1.2-6.fc7 updates 2.3 M
arm-gp2x-linux-glibc noarch 2.3.6-4.fc7 updates 13 M
arm-gp2x-linux-kernel-headers noarch 2.6.12.0-1.fc7 updates 885 k
Transaction Summary
=============================================================================
Install 7 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 25 M
因為安裝完出現arm-gp2x-linux-gcc 而無 arm-linux-gcc,修改安裝檔 Makefile
#CROSS_COMPILE = /opt/xscalev1/bin/arm-linux-
CROSS_COMPILE = /usr/bin/arm-gp2x-linux-
再重編
[root@pc linux-2.4.21-51Board_EDR]# make bzImage
出錯:
/usr/bin/arm-gp2x-linux-gcc -D__KERNEL__ -I/home/axer/xsbase270/Kernel/linux-2.4.21-51Board_EDR/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -fno-omit-frame-pointer -mapcs -mno-sched-prolog -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -mshort-load-bytes -msoft-float -Uarm -DKBUILD_BASENAME=main -c -o init/main.o init/main.c
cc1: error: unrecognized command line option "-mapcs-32"
cc1: error: unrecognized command line option "-mshort-load-bytes"
make: *** [init/main.o] Error 1
這裡的方法無法使用,詢問原廠工程師該信函答覆如下:
===========================================================
LucasChen 寄給 我 顯示詳細資料 2008/12/31 (9 天以前)
請見第25頁 安裝toolchain
將xscalev1.tar.gz copy 到PC的 /opt 然後解壓縮
修改 ~/.bash_profile 這個檔案
新增路徑
第27頁 以source指令重新存取該檔案
之後在任何路徑底下都能使用 arm-linux-gcc
============================================================
照做
# cd xsbase270/Toolchain/
# cp xscalev1.tar.gz /opt
# cd /opt/
# tar zxvf xscalev1.tar.gz
# vi ~/.bash_profile
加入一行:
PATH=$PATH:/opt/xscalev1/bin
使指令立刻生效
# source ~/.bash_profile
寫一個hello.c, 再編譯測試,可用這行檢查檔案屬性
# vi hello.arm.c
# /opt/xscalev1/bin/arm-linux-gcc hello.arm.c
[root@pc ~]# file a.out
a.out: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
到 Kernel/linux-2.4.21-51Board_EDR 下編譯
# cd /home/axer/xsbase270/Kernel/linux-2.4.21-51Board_EDR
# make zImage
如此能正確編譯,完成後,會在 /home/axer/xsbase270/Kernel/linux-2.4.21-51Board_EDR/arch/arm/boot
下找到 zImage 這個檔案。
十二、重做步驟八
下載內核到模組
開機選單選[a] Set default Kernel filename and Filesystem filename
Kernel name設為 zImage (步驟十一完成的檔案)
FileSystem name 設為 zfs270
按[3] Download default Kernel 下載內核
按[4] Flash Kernel 燒錄內核
按[5] Download default Filesystem下載檔案系統
........
這裡花了六七個小時的虛工,下載一半就停止,找不到原因。最後直接把實驗的環境和學校隔離…
接線的照片。完工....七六個小時找不到錯,原來是學校網路太亂,廣播亂跑
........
按[6] Flash Filesystem 燒錄檔案系統
按[7] Boot system 重開機
開機畫面..........
..................
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 4096 bind 8192)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
NetWinder Floating Point Emulator V0.97 (double precision)
IrCOMM protocol (Dag Brattli)
RAMDISK: Couldn't find valid RAM disk image starting at 0.
Freeing initrd memory: 4224K
FAT: bogus logical sector size 381
VFS: Mounted root (jffs2 filesystem).
Mounted devfs on /dev
Freeing init memory: 388K
Kernel panic: No init found. Try passing init= option to kernel.
沒地方下參數,不知要怎麼處理。
經詢問高雄原廠後,得知可能原因為 Kernel或FS 失敗,因此重新上載 default 的 kernel.
燒錄完後重載成功…
十三、開機
第一次登入使用者為 root,密碼不用
修改 設定檔
[root@51Board conf]# vi /conf/xsbase270_config
將網路介面修改為自己想要的ip
#------------------------------------------------------------
# System Setting
HOST_NAME="XSBase270_Axer"
#------------------------------------------------------------
# Ethernet Setting
eth0_IPADDR="10.200.0.3"
eth0_NETMASK="255.255.0.0"
#------------------------------------------------------------
# Route Setting
ROUTE_DEFAULT="10.200.0.254"
#------------------------------------------------------------
# DNS_Server Setting
DNS_SERVER="nameserver 168.95.1.1"
DNS_SERVER="nameserver 10.200.0.254"
修改字型編碼
# vi /etc/sysconfig/i18n
LANG="zh_TW.UTF-8"
SUPPORTED="zh_TW.UTF-8:en_US:en:zh_TW:zh"
SYSFONT="latarcyrheb-sun16"
修改Telnet 讓 root可以telnet
# mv securetty securetty.bak
重新啟動
十四、設備趨動
1.CF 卡 mount
# mount /dev/hda1 /mnt/cf
2.SD 卡 mount
# mount /dev/mmcda1 /mnt/mmc_sd
解mount方法:
# umount /mnt/mmc_sd
3.撥放mp3
# splay mu1.mp3 mu2.mp3 ....
4.錄音
# cat /dev/dsp > rec.wav
原文2008.12