การติดตั้งและใช้งาน uClinux บน board AKI-H8/3069LAN

การติดตั้งและใช้งาน uClinux บน board AKI-H8/3069LAN
ในการใช้งานจริงสามารถใช้ Service ของ Windows และ Linux ผสมประสานกันได้ครับ บทความนี้ท้ายที่สุดเราจะได้ลอง run service thttpd บน cpu H8/3069 เพื่อให้บริการ webpage ครับ
เริ่มต้นด้วยการ download redboot จาก web ของหนังสือ [はじめて組込みLinux] อยู่ในหมายเหตุด้านล่างครับ
จากนั้นทำการเขียนลง board ด้วยขั้นตอนเดิมครับ(บทความเก่า) สำหรับท่านที่ใช้งาน linux สามารถใช้คำสั่งตามนี้ครับ
$ h8write -3069 -f20 redboot_std_2mb.sec
ใน option -f20 คือค่าของ crystal ที่ใช้หน่วยเป็น MHz ส่วน 2Mb ในชื่อไฟล์คือค่าของ DRAM ใน board
ในส่วนการนำ RS232toUSB มาใช้งาน สามารถใช้งานได้ปกติไม่มีปัญหาใดๆครับ ผมใช้ แบบ USB V.1.1 สามารถใช้ได้ทั้ง windowsXP และLinux การใช้งานใน windowsXPsp2 ต้องทำการติดตั้ง Drvier ก่อนครับ ส่วน linux ผมใช้ CentOS5 ไม่ต้องติดตั้งใดๆทั้งสิ้นสามารถใช้งานได้ทันที ตัว CentOS5 Link download อยู่ด้านล่างเช่นกันครับ


เมื่อสามารถทำการ ติดตั้ง redboot ได้แล้ว ให้ทำการเปิดโปรแกรมสำหรับสื่อสาร port serial (HyperTerminal) ตั้งค่า
Baud rate: 38400,n,8,1 สำหรับตัว CentOS5 ใช้โปรแกรม minicom ที่มีมาให้ครับ การตั้งค่าให้คำสั่งต่างๆ
$ minicom -s
ใช้งานง่ายครับ ถ้าเป็น com port ก็ใช้ device : /dev/ttySX ถ้าเป็นแบบ สามารถใช้คำสั่ง $ dmesg เพื่อดู Device ที่ใช้ได้การติดต่อได้ครับ

จากนั้นทำการกดปุ่ม reset ที่ตัว H8 จะมีข้อความแสดงออกมาผ่านทาง port serial และทำการ load Ethernet device ในการ load Ethernet ของ redboot สามารถใช้งาน service DHCP Dynamic หรือจะกำหนด IP คงที่ก็ได้เช่นกัน แต่ต้องทำการตั้งค่า Default server ให้ถูกต้อง ip ที่ใช้ระบุคือ ip ของเครื่องที่ให้บริการ NFS (Network Files System)
ค่าเริ่มต้นจะเป็น DHCP ถ้าำขั้นตอนถูกต้องจะมีข้อความนี้ครับ
-----------------------------------------------------------------------------------------------
+DP83902A - eeprom ESA: 00:02:cb:02:2a:12
Ethernet eth0: MAC address 00:02:cb:02:2a:12
IP: 172.16.1.55/255.255.255.0, Gateway: 172.16.1.253
Default server: 172.16.1.152
RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 14:54:02, Dec 21 2006
Platform: Akizuki H8/3068 Network micom (H8/300H)
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
RAM: 0x00400000-0x005f4000, [0x00400000-0x005e1000]
FLASH: 0x00000000 - 0x80000, 8 blocks of 0x00010000 bytes each.
RedBoot>
-----------------------------------------------------------------------------------------------
ขั้นตอนต่อไป เป็นการติดตั้ง Service ต่างๆ ที่จำเป็นดังนี้
1. tftpd service
2. nfs server
3. program ต่างๆ เพื่อทำการ make linux image ไฟล์
ขั้นตอนที่ 1และ 2 สามารถใช้งานผ่าน windows ได้ แต่ข้อ 3 ผมใช้ linux ครับ
การทำงานบน cygwin ผมไม่ได้ลองครับ ทั้งสามขั้นตอนผมทำงานบน CentOS5 ที่ขี่บน windows ด้วย visualPC อีกทีครับ คิดว่าไม่น่าจะมีปัญหานะครับ ต่อมาก็มาเริ่มการติดตั้ง tftpd service ในแผ่นมีครับผม download แบบ DVD มาครับ
ถ้าไม่มีแผ่นสามารถใช้ติดตั้งผ่าน yum ได้ครับ
# yum install tftp-server
สำหรับคนที่ไม่ชอบ text-mode ถนัดใช้ add/remove software ใน xwindows นั้น ก่อนใช้งานต้องต่ออินเตอร์เน็ตให้เรียบร้อยก่อนนะครับ ในการค้นหารายชื่อโปรแกรมจะใช้อินเตอร์เน็ตครับ (ไม่เข้าใจเหมือนกันครับ ผมก็ใช้แบบ DVD ไม่ต้องสลับผ่าน แล้วทำไม่ต้องต่ออินเตอร์เน็ตด้วย)
$vi /etc/xinetd.d/tftp
จากนั้นกำหนดค่าในไฟล์ ตามนี้ครับ
-----------------------------------------------------------------------------------------------
service tftp {
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
}
-----------------------------------------------------------------------------------------------
ในส่วนของชื่อ directory /tftpboot สามารถกำหนดเป็นอะไรก็ได้ ผมกำหนดเป็น /t เพราะว่ากว่าจะทำผ่านทุกขั้นตอนจะต้องเรียนคำสั่งบ่อยมากครับ สั้นๆสะดวกกว่า และตัว minicom ถ้าจำนวนตัวอักษรเกิน 80 มันจะทับดูไม่รู้เรื่องครับ
จากนั้นก็สร้าง directory ตามที่เราตั้งชื่อครับ
$ mkdir /t
$ /etc/init.d/xinetd restart หรือ service xinetd restart
เรื่อง permission และ user ผมใช้ root ตลอดไม่มีปัญหาอะไรครับ
ขั้นตอนไป ติดตั้ง NFS server จากแผ่นครับ และทำการสร้างไฟล์ exports ครับ
ก่อนอื่น สร้าง directory ของ nfs สำหรับ client แต่ละ board กำหนดชื่อตามใจชอบได้เลยครับ (เห็นบางคนกำหนดเป็นชื่อหมายเลข ip เลยเข้าใจงายดี แต่ผมใช้ n3 ครับ)
$ mkdir /t/n3
$ vi /etc/exports
จากนั้นกำหนดค่าในไฟล์ exports ตามนี้ครับ
-----------------------------------------------------------------------------------------------
$ /t/t3 172.16.1.55 (rw)
-----------------------------------------------------------------------------------------------
สามารถกำหนดเป็น network ก็ได้ครับ
กรณี share ไฟล์ครับ [
$ /t/t3 172.16.1.0 255.255.255.0(rw) ]
แล้วก็มากำหนดสิทธิ์การติดต่อจากภายนอก
$ vi /etc/hosts.allow
จากนั้นกำหนดค่าในไฟล์ hosts.allow ตามนี้ครับ
-----------------------------------------------------------------------------------------------
rpc.mountd: ALL
portmap: ALL
rquotad: ALL
mountd: ALL
statd: ALL
-----------------------------------------------------------------------------------------------
$ service nfs restart
Stopping NFS mountd: [ OK ]
Stopping NFS daemon: [ OK ]
Stopping NFS services: [ OK ]
Stopping NFS quotas: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]

ขั้นต่อไปคือการ make image
ให้ติดตั้ง library และ program ที่ใช้ในการ compile ให้เรียบร้อยก่อนนะครับ จะได้ไม่มีปัญหาเสียอารมณ์ ผมจะแนะนำในการติดตั้งแบบ add/remove software ให้ครับ
1. Development -> Legacy Software Development [เลือกทั้งหมด]

2. Base System -> Legacy Software Support [กากถูกก็พอ โปรแกรมเลือกอัตโนมัติให้ 3 รายการ]

ทำการ download uClinux จาก Link ด้านล่างครับ
$ mkdir /opt
$ cd /opt
$ wget http://uclinux.quake4.jp/uClinux/Chapter2/uClinux-dist-sbcrbook20070218.tar.gz
$ tar -xfvz uClinux-dist-sbcrbook20070218.tar.gz
$ cd uClinux-dist
$ make clean
$ make menuconfig
-----------------------------------------------------------------------------------------------
Vendor/Product Selection --->
--- Select the Vendor you wish to target
[X] Akizuki
--- Select the Product you wish to target
[X] AE3068

Kernel/Library/Defaults Selection --->
Kernel Version
[X] linux-2.4.x
uClibc Libc Version
[X] Default all settings (lose changes) (NEW)
[X] Customize Kernel Setting (NEW)
[X] Customize Vendor/User Setting (NEW)

Exit -> Exit ->
Save configuration -> Yes
-----------------------------------------------------------------------------------------------
Main Menu
Block device
[ ] ROM disk memory block device (blkmem)
Networking options
[X] TCP/IP networking
[X] IP: Kernel level autoconfiguretion
[X] IP: DHCP support (NEW)
File system
[ ] ROM file system support
Network File Sytems
[X] NFS file system support
[X] Provide NFSv3 client support
[ ] ....
[X] Root file system on NFS
Exit -> Exit ->
Save configuration -> Yes
-----------------------------------------------------------------------------------------------
Userland Setting
-----------------------------------------------------------------------------------------------
Main Menu
Core Applications
[X] init
[X] reboot
[X] shutdown
Network Application
[X] thttpd
[X] BusyBox
[X] free
Exit -> Exit ->
Save configuration -> Yes
ส่วนอื่นๆ ที่ไม่มีการแก้ไข ผมไม่ได้แสดงให้ดูครับ ปล่อยไว้อย่างไงละครับ
-----------------------------------------------------------------------------------------------
$ make dep > make-dep.out &
$ make > make.out &
ในขั้นตอนนี้จะให้เวลาค่อยข้างมากครับ เมื่อไม่มี error ใดๆ จะแสดงข้อความดังนี้
-----------------------------------------------------------------------------------------------
genromfs -v -V "ROMdisk" -f romfs.img -d /opt/uClinux-dist/romfs
h8300-linux-elf-objcopy -O binary \
/opt/uClinux-dist/linux-2.4.x/linux linux.bin
cat linux.bin romfs.img > /opt/uClinux-dist/images/aki3068net-image.bin
/opt/uClinux-dist/tools/cksum -b -o 2 /opt/uClinux-dist/images/aki3068net-image.bin >> /opt/uClinux-dist/images/aki3068net-image.bin
gzip -c -9 /opt/uClinux-dist/images/aki3068net-image.bin > /opt/uClinux-dist/images/aki3068net-imagez.bin
/opt/uClinux-dist/tools/cksum -b -o 2 /opt/uClinux-dist/images/aki3068net-imagez.bin >> /opt/uClinux-dist/images/aki3068net-imagez.bin
Copying images to /tftpboot ...
make[2]: Leaving directory `/opt/uClinux-dist/vendors/Akizuki/AE3068'
make[1]: Leaving directory `/opt/uClinux-dist/vendors'
-----------------------------------------------------------------------------------------------
copy ไฟล์ image ไปยัง directory ของ tftp service ที่ได้กำหนดไว้ ในไฟล์ /etc/exports
$ cp image/aki3068net-image.bin /t/linux_romfs.bin
$ cp --archive romfs/* /t/n3
$ cd /t/n3
$ mknod console c 5 1
$ mknod ttySC0 c 204 8
$ mknod ttySC1 c 204 9
$ mknod ttySC2 c 204 10
$ mknod null c 1 3
$ rm @*
จบขั้นตอนการเตรียมไฟล์ต่างๆ แล้วครับ
ขั้นต่อไปเป็นการสั่ง load ไฟล์ linux image ด้วย redboot
กลับไปที่หน้าจอ HyperTerminal ที่รัน redboot อยู่ เราจะทำการสั่งให้ redboot ไป load ไฟล์ linux image ที่ TFTP Serverที่เราเตรียมเอาไว้ครับ ด้วยคำสั่งนี้
-----------------------------------------------------------------------------------------------
RedBoot>load -r -v -b 0x400000 linux_romfs.bin
Using default protocol (TFTP)
/
Raw file loaded 0x00400000-0x005131f7, assumed entry at 0x00400000
-----------------------------------------------------------------------------------------------
จากนั้น redboot จะทำการ load linux image ไฟล์เข้าไปยัง DRAM ในตำแหน่ง 0x400000 จะใช้เวลาประมาณ 2-3 นาทีครับ
ขั้นตอนต่อไปทำการสั่งให้ redboot ไปรัน linux image ครับ
-----------------------------------------------------------------------------------------------
RedBoot> exec -c "console=ttySC1,38400n81 nfsroot=172.16.1.152:/t/n3"
ใน option nfsroot เป็นการระบุ nfs server และ path ของ userland ส่วน Console ยังคงเป็น rs232 ผมใช้ port com1 ครับ แต่เนื่องจากเราสั่งรัน Linux image มันจะนำ linux มาขี่ในหน้าจอ terminal อีกชั้นทำให้กลายเป็น port com2 ที่ใช้ติดต่อกัน Linux (มองง่ายๆ เหมือนเรา telnet สองชั้น)
จะนั้นตัว linux จะ boot และแสดงสถานะการ boot เหมือน รันบน PC ครับ

Now booting linux kernel:
Entry Address 0x00400000
Cmdline : console=ttySC1,38400n81 nfsroot=172.16.1.152:/t/n3
Linux version 2.4.31-uc0 (
root@AE3068) (gcc version 3.4.3) #11 Mon Jun 25 00:23:
25 JST 2007
uClinux H8/300H
Target Hardwa
H8/300 series support by Yoshinori Sato <
ysato@users.sourceforge.jp>
Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne
On node 0 totalpages: 1536
zone(0): 0 pages.
zone(1): 1536 pages.
zone(2): 0 pages.
Kernel command line: console=ttySC1,38400n81 nfsroot=172.16.1.152:/t/n3
virtual vector at 0x00fffd20
Calibrating delay loop... 3.26 BogoMIPS
Memory available: 968k/1049k RAM, 0k/0k ROM (786k kernel code, 206k data)
Dentry cache hash table entries: 1024 (order: 1, 8192 bytes)
Inode cache hash table entries: 512 (order: 0, 4096 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 2048 (order: 1, 8192 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Starting kswapd
SuperH SCI(F) driver initialized
ttySC0 at 0x00ffffb0 is a SCI
ttySC1 at 0x00ffffb8 is a SCI
ttySC2 at 0x00ffffc0
ne.c:v1.10 9/23/94 Donald Becker (
becker@scyld.com)
Last modified Nov 1, 2000 by Paul Gortmaker
NE*000 ethercard probe at 0x200000:<4>eth0: interrupt from stopped card
00 02 cb 02 2a 12
eth0: NE1000 found at 0x200000, using IRQ 17.
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 512 bind 1024)
Sending DHCP and RARP requests ., OK
IP-Config: Got DHCP answer from 172.16.1.253, my address is 172.16.1.55
IP-Config: Complete:
device=eth0, addr=172.16.1.55, mask=255.255.255.0, gw=172.16.1.253,
host=172.16.1.55, domain=localdomain, nis-domain=(none),
bootserver=172.16.1.253, rootserver=172.16.1.152, rootpath=
Looking up port of RPC 100003/2 on 172.16.1.152
Looking up port of RPC 100005/1 on 172.16.1.152
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 32k freed (0x4d0000 - 0x4d7000)
Shell invoked to run file: /etc/rc
Command: hostname AE3068
Command: mount -t proc proc /proc
Command: cat /etc/motd
Welcome to
___ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|
Akizukidenshi/AE-3068 (aki3069net) port.
For further information check:
http://www.uclinux.org/
Execution Finished, Exiting
init: Failed to open /etc/inittab.
Sash command shell (version 1.1.1)
$_

ถ้าเราทำทุกขั้นตอนถูกต้องตอนท้าย linux จะไปรัน /etc/rc ในไฟล์ rc จะกำหนด hostname และทำการ mount proc จากนั้น แสดง logo uclinux ซึ่งเก็บอยู่ในไฟล์ /etc/motd ที่อยู่ใน userland (/t/n3) ท้ายสุดจะทำการกำหนดสภาวะการทำงาน โดย /etc/inittab แต่เนื่องจากไม่ได้กำหนดไว้ จึงมี error แต่ก็ไม่เป็นไรครับ
-----------------------------------------------------------------------------------------------
สิ่งแรกที่ทำคือการ ทดสอบคำสั่งพื้นฐาน คำสั่งต่างๆ จะมีน้อยกว่าใน pc เราสามารถเพิ่มลดได้ เพื่อประหยัดหน่วยความจำ ในกรณีเราติดตั้งบน memory card (คิดว่าบทความต่อไปจะลองกับ harddisk ดูครับ) ในกรณีที่ผมทำนี้ใช้พื้นที่เก็บไพล์บน NFS server ไม่มีปัญหา เรื่องนี้ครับ
/> ls
var mnt dev proc sbin bin home tmp usr etc lib
/> ls var
www
/> ls var/www
index.html
/> cat /var/www/index.htm

/> ls /bin

cat sh ping true route thttpd ls ifconfig
false shutdown init busybox reboot hostname mount pwd
/> thttpd -p 80 -d /var/www/ &
[18]
/>
ผมได้ทำการสร้างไฟล์ html hello ไว้ก่อนหน้านี้ครับ ต้องทำด้าน pc ครับเพราะไม่ได้ลงโปรแกรม text editor เอาไว้ครับ
คำสั่ง และservice จะเก็บไว้ที่ /bin ส่วน html code ผมเก็บที่ /var/www การรัน service httpd เราจะให้ thttpd แทน ซึ่งเราทำการเลือกติดตั้ง ตั้งแต่แรก ในหัวข้อ userland
คำสั่งในการรัน service thttpd คือ
/> thttpd -p 80 -d /var/www/ &
option
p คือการกำหนด หมายเลย port สำหรับให้บริการ ในกรณีกำหนด port อื่นๆ การเรียก url จะต้องระบุ port ด้วย เช่นใน port 999 url คือ
d คือ directory ที่เก็บ index.html ถ้ากำหนด start page อย่างอื่นก็เรียกแบบนี้ครับ


ขอแถม
เราสามารถดูค่าสถานะ port ต่างๆ ได้ด้วยครับ
/> cat /proc/gpio
P1: OOOOOOOO
P2: OOOOOOOO
P3: IIIIIIII
P4: --------
P5: -------O
P6: --------
P8: ----OO--
P9: --I-I-O-
PA: --------
PB: --OO----
-----------------------------------------------------------------------------------------------
หมายเหตุ
สำหรับตัว redboot ที่ใช้กับ board ของ aki สามารถ download ได้ตาม link ด้านล่าง เป็นที่สำหรับ download ไฟล์ต่างๆ ที่ใช้ในหนังสือ はじめて組込みLinux(ha-ji-me-te ku-mi-co-mi linux)
อ้างอิง
4. http://isoredirect.centos.org/centos/5/isos/i386/ [download Linux CentOS5]

อ่านจบแล้วก็ช่วย comment ด้วยครับ ขอบคุณครับ เจอกันผลความหน้่ครับ

Comments

Anonymous said…
ผมอยู่ที่เมืองไทยครับ แต่ว่าอยากจะได้บอร์ด Microcontroller ของ Renesas มาลองเล่นซักบอร์ดหนึ่งอ่ะครับ
แต่ว่าเมื่อก่อนเคยได้เรียนเกี่ยวกับพวก uITRON จากธรรมศาสตร์ครับ แต่ตอนนี้ผมอยากจะทราบว่าถ้าจะสั่งซื้อบอร์ดนี้
จากเมืองไทย จะทำได้หรือเปล่าครับ แล้วเว็บไหนที่ให้สามารถสั่งซื้อบอร์ด ของ H8/3069F ได้ครับผม และถ้าจะสั่งซื้อ
จะสามารถทำได้อย่างไรบ้างครับผม หมายถึงวิธีการสั่งซื้อครับ


http://www.google.com/translate?u=h**p%3A%2F%2Fakizukidenshi.com%2Fcatalog%2Fitems2.php%3Fq%3D%2522K-00168%2522%26s%3Dpopularity%26p%3D1%26r%3D1%26page%3D%26cl%3D1&langpair=ja%7Cen&hl=en&ie=UTF8


ขอบคุณด้วยความนับถือครับ
จิตเกษม ปินทะยา
กัง said…
ที่ไทยไม่มีขายครับ
ตอนนี้ผมกลับมาที่ไทยแล้ว มีเวลาจะเริ่มพัฒนาต่อครับ ติดตามข่าวสารได้จาก blog ครับ
Anonymous said…
ผมก็ชอบ Renesas ครับ แต่ขาด ความรู้ครับ ช่วยแนะนำด้วย
ที่ไทย พร้อมหนังสือ และ tool ครับ linux ใครนำมาขายครับ ช่วยบอกหน่อย
Email : nakhonsong_ole@hotmail.com
tel : 085 3473379
กัง said…
ขอบคุณนะครับคุณ nakhonsong
ที่สนใจ บอร์ดยังไม่มีขายที่ไทยครับ
ลองหา arm เล่นไปก่อนนะครับ
ถ้าเจอแล้วจะแจ้งใน blog ครับ