2007년 5월 25일 금요일

키패드와 Text LCD를 로그인으로 사용하기

NetBSD의 gallery란에 Jesse Off 씨가 올린 그림인데 이 그림에 혹해서 사게 된 계기가 되기도 했지만 정말 될까 의심이 많이 되었습니다. 결론은? 된다고 보는게 맞다.


그런데 또 다른 그림을 보면 이렇게 쓰더군요.
그 유명한 toaster 기계. 그런데 잘 보면 입력은 키패드가 아닌 키보드를 연결해서 쓰고 있죠.
그래서 다음 그림을 또 다시 보게 되었죠.



해외 주문해서 살때 가이드가 되어준 그림이기도 한데(저거랑 똑같이 샀음^^) USB 키보드를 연결해 둔 것을 알 수 있습니다.
NetBSD의 놀라운 또한가지의 특이한 사실을 알게 되는 순간이었는데 NetBSD Guide 설명에서 글로만 보았던 Console driver의 놀라운 능력인 Virtual console 기능을 살리고 위와 같이 연결해 두면 키패드, 키보드 두 군데에서 입력받은 문자가 LCD에 출력이 됩니다. 로그인 해서 ls 등등의 명령어도 실행할수 있습니다. 전 여기서 쓰러지는 줄 알았습니다. 너무 기특해서...
CF Card에 설치한 NetBSD에 조금 설정 상태를 바꾸어 주어야하는데 전 다음과 같이 했습니다.
/etc/ttys 변경
--------------
ttyE0 "/usr/libexec/getty Pc" vt220 off secure
ttyE1 "/usr/libexec/getty Pc" vt220 off secure
ttyE2 "/usr/libexec/getty Pc" vt220 off secure
를 다음처럼 변경
ttyE0 "/usr/libexec/getty LCD" vt100 on secure
ttyE1 "/usr/libexec/getty LCD" vt100 on secure
ttyE2 "/usr/libexec/getty LCD" vt100 on secure

/etc/gettytab에 추가
--------------------
LCD:\
:ce:ck:np:im=%s/%m (%t)\r\n:

/etc/rc.conf에 추가
-------------------
wscons=YES

# sh /etc/rc.d/wscons;/etc/rc.d/ttys restart 하면 된다고 했는데 TS-7200 보드에서는 안되는거 같더군요. 재부팅하면 됩니다.
부팅 중이건 기동 중이건 상관없이 USB 키보드를 연결하면 다음과 비슷한 메시지가 console 창에 뜰겁니다. 아래는 logitec 무선 키보드/마우스를 연결한 상황입니다.
uhidev0 at uhub0 port 1 configuration 1 interface 0
uhidev0: Logitech USB Receiver, rev 1.10/38.10, addr 2, iclass 3/1
ukbd0 at uhidev0: 8 modifier keys, 6 key codes
wskbd1 at ukbd0 mux 1
wskbd1: connecting to wsdisplay0
uhidev1 at uhub0 port 1 configuration 1 interface 1
uhidev1: Logitech USB Receiver, rev 1.10/38.10, addr 2, iclass 3/1
uhidev1: 17 report ids
uhid0 at uhidev1 reportid 2: input=6, output=0, feature=0
uhid1 at uhidev1 reportid 3: input=4, output=0, feature=0
uhid2 at uhidev1 reportid 4: input=1, output=0, feature=0
uhid3 at uhidev1 reportid 16: input=6, output=6, feature=0
uhid4 at uhidev1 reportid 17: input=19, output=19, feature=0
ps) Text LCD가 조금만 커도 꽤 쓸만하겠다는 생각이 드네요. 80x24 짜리면 더 없이 좋겠지만... 그리고 저는 LCD에 /dev/ttyE0가 아닌 /dev/ttyE1 이 뜨더군요. 아직 배울게 많은가 봅니다.

Custom kernel 빌드하기

이 부분이 다른 어떤 OS에서도(같은 계열인 FreeBSD, OpenBSD 도 포함) 맛볼수 없는 어찌보면 디자인한 분의 경외심까지 일으키는 부분입니다. 보통 Linux에서 맨 처음 임베디드보드에 개발을 한다고 하면 Target machine인 임베디드보드는 단지 실행환경만 갖춘 컴퓨터이고 Host machine(보통 x86 계열의 PC)에 Cross compiler를 설치해서 소스를 컴파일해서 결과물로 나온 실행파일을 Target machine에 전송하여 실행이 제대로 되는지 확인하는 방법을 이용합니다. 뭐 사실 CF Card에 NetBSD를 설치했으니 compiler가 설치되어 있어서 직접 컴파일도 할수 있습니다. 참 좋은 세상이죠^^ 하지만 kernel build와 같이 많은 시간을 잡아먹는 작업을 Target machine에서 직접한다는 것은 조금은 바보 같은 짓일겁니다. 그런데 Linux에서 Cross compiler 설치하는 작업이 NetBSD에서는 없습니다. 엄밀하게는 존재하겠지만 이것 역시 compile 작업을 통해서 임시로 설치되게 됩니다. 즉, Cross compiler(NetBSD에서는 tool-chain 이라고 합니다.) 역시 컴파일 단계를 거치게 됩니다. 재미있죠. 어쩌면 이것 역시 바보같은 짓 아니냐 할지 모르지만 NetBSD가 얼마나 많은 플랫폼에 포팅이 되어있는지를 안다면 너무나 편리합니다. Linux라고 한다면 Target machine이 서로 다른 CPU를 가진 보드라고 한다면 아마도 Host machine을 각 임베디드 보드 개수만큼 마련해서 Cross compiler를 설치해 두어야 할겁니다. 하지만 NetBSD는 해당 Target machine에 해당하는 tool-chain을 미리컴파일 해두면 그것으로 족합니다. 내용이 너무 장황하게 다른쪽으로 빠지는 것 같아 이만 줄이고 실제 어떻게 진행되는지 출력내용을 가지고 한번 보겠습니다.

저는 편의상 vmware를 이용해서 NetBSD 3.1을 설치해서 Host machine으로 사용하고 있습니다.

1st. tool-chain 만들기
----------------------
netbsd: {91} ./build.sh -m evbarm tools
===> build.sh command: ./build.sh -m evbarm tools
===> build.sh started: Fri May 11 19:23:40 KST 2007
===> No nonexistent/bin/nbmake, needs building.
===> Bootstrapping nbmake
checking for sh... /bin/sh
checking for gcc... cc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for executable suffix...
checking for object suffix... o
checking whether we are using the GNU C compiler... yes
checking whether cc accepts -g... yes
checking how to run the C preprocessor... cc -E
.........
===> Tools built to /usr/src/tooldir.NetBSD-3.1-i386
===> build.sh started: Fri May 11 19:23:40 KST 2007
===> build.sh ended: Fri May 11 19:46:06 KST 2007
===> Summary of results:
build.sh command: ./build.sh -m evbarm tools
build.sh started: Fri May 11 19:23:40 KST 2007
No nonexistent/bin/nbmake, needs building.
Bootstrapping nbmake
MACHINE: evbarm
MACHINE_ARCH: arm
TOOLDIR path: /usr/src/tooldir.NetBSD-3.1-i386
DESTDIR path: /usr/src/destdir.evbarm
RELEASEDIR path: /usr/src/releasedir
Created /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake
makewrapper: /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake-evbarm
Updated /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake-evbarm
Tools built to /usr/src/tooldir.NetBSD-3.1-i386
build.sh started: Fri May 11 19:23:40 KST 2007
build.sh ended: Fri May 11 19:46:06 KST 2007

시작, 끝나는 시간을 보면 알겠지만 조금 시간이 걸립니다. 뭐 이걸 가지고 딴지 건다면 뭐라 할말은 없습니다.

2nd. kernel 설정하기
---------------------
/usr/src/sys/arch/evbarm/conf 에 있는 걸 이용해서 설정 파일 만들기 여기서는 기본적으로 있는 TS7200_INSTALL 이용하겠습니다.

3rd. kernel 빌드
-----------------
netbsd: {92} ./build.sh -u -m evbarm kernel=TS7200_INSTALL
.......
===> Kernels built from TS7200_INSTALL:
/usr/src/sys/arch/evbarm/compile/obj/TS7200_INSTALL/netbsd
===> build.sh started: Fri May 11 20:03:09 KST 2007
===> build.sh ended: Fri May 11 20:11:19 KST 2007
===> Summary of results:
build.sh command: ./build.sh -u -m evbarm kernel=TS7200_INSTALL
build.sh started: Fri May 11 20:03:09 KST 2007
No nonexistent/bin/nbmake, needs building.
Bootstrapping nbmake
MACHINE: evbarm
MACHINE_ARCH: arm
TOOLDIR path: /usr/src/tooldir.NetBSD-3.1-i386
DESTDIR path: /usr/src/destdir.evbarm
RELEASEDIR path: /usr/src/releasedir
Created /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake
makewrapper: /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake-evbarm
Updated /usr/src/tooldir.NetBSD-3.1-i386/bin/nbmake-evbarm
Building kernel without building new tools
Building kernel: TS7200_INSTALL
Build directory: /usr/src/sys/arch/evbarm/compile/obj/TS7200_INSTALL
Kernels built from TS7200_INSTALL:
/usr/src/sys/arch/evbarm/compile/obj/TS7200_INSTALL/netbsd
build.sh started: Fri May 11 20:03:09 KST 2007

tool-chain 빌드시간보다는 적게 걸렸네요^^

4th. 빌드한 kernel 확인하기
-----------------------------
netbsd: {99} pwd
/usr/obj/sys/arch/evbarm/compile/TS7200_INSTALL
netbsd: {100} ls -al net*
-rwxr-xr-x 1 pjy users 6514722 May 11 20:11 netbsd
-rwxr-xr-x 1 pjy users 6514727 May 11 20:11 netbsd-epe0
-rwxr-xr-x 1 pjy users 6002992 May 11 20:11 netbsd-epe0.bin
-rwxr-xr-x 1 pjy users 6514726 May 11 20:11 netbsd-sd0
-rwxr-xr-x 1 pjy users 6002992 May 11 20:11 netbsd-sd0.bin
-rwxr-xr-x 1 pjy users 6514726 May 11 20:11 netbsd-wd0
-rwxr-xr-x 1 pjy users 6002992 May 11 20:11 netbsd-wd0.bin
-rwxr-xr-x 1 pjy users 6002992 May 11 20:11 netbsd.bin

Jesse Off 씨께서 요렇게 다양한 kernel build물이 나오게끔 설정파일을 만들어 두었습니다. 이건 앞에서의 설정 파일만 조금 보더라도 금방 이해가 갈 겁니다. 그런데 아직 .bin으로 끝나는 것과 아닌것과의 차이를 잘 모르겠네요. CF Card Mount 용 이미지는 netbsd-wd0.bin 이고 CF Card로의 NetBSD 설치에 사용되는 이미지는 netbsd.bin 입니다. 원하는 이미지를 이제 tftp 서버에 위치해두고 Redboot를 이용해서 Kernel을 로드하여 기동하면 다음과 비슷한 메시지가 나오게 됩니다.

RedBoot> go
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 3.1 (TS7200_INSTALL) #0: Fri May 11 20:11:11 KST 2007
pjy@netbsd.myhome:/usr/obj/sys/arch/evbarm/compile/TS7200_INSTALL

로그인후 uname 명령으로도 알수 있구요.


마지막으로 한가지 더 이야기하자면 지금까지 언급한 kernel 빌드 단계가 굳이 임베디드를 위한 cross-compile 환경이 아닌 native 환경에서도 동일하다는 사실. 놀랍죠~ NetBSD의 "Clean Design" 이라는 문구가 단지 말이 아닌 실체로 느껴지는 순간이기도 하죠.

부트 메시지

커널이 다르고 설치된 하드웨어가 다르다면 당연히 부트메시지가 다르겠죠. 그래서 각각의 부트메시지를 모두 종합해 보았습니다.

Case: NetBSD를 CF Card에 설치하기 위해 netbsd-TS7200_INSTALL.bin 커널을 로드한 경우
-----------------------------------------------------------------------------------------------
>> TS-BOOTROM, Rev 1.08 - built 10:44:37, May 26 2006
>> Copyright (C) 2006, Technologic Systems
>> TS-7200: Rev E0 CPU, Rev C PLD, 32MB SDRAM

+Ethernet eth0: MAC address 00:d0:69:40:87:e4
IP: 192.168.0.50/255.255.255.0, Gateway: 192.168.0.1
Default server: 192.168.0.1

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version current-TS_5 - built 11:53:02, Jun 7 2006

Platform: TS-7200 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

RAM: 0x00000000-0x02000000, [0x00044f88-0x01fdd000] available
FLASH: 0x60000000 - 0x61000000, 128 blocks of 0x00020000 bytes each.
== Executing boot script in 0.100 seconds - enter ^C to abort
^C
RedBoot> load -v -r -b 0x00200000 -h 192.168.0.251 netbsd-TS7200_INSTALL.bin
Using default protocol (TFTP)
TFTP timed out 1/15
TFTP timed out 2/15
\
Raw file loaded 0x00200000-0x007c1a07, assumed entry at 0x00200000
RedBoot> go
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

pmap_postinit: Allocated 35 static L1 descriptor tables
NetBSD 3.0_STABLE (TS7200_INSTALL) #1: Fri Jul 21 09:59:42 MST 2006
joff@construct:/home/joff/NetBSD-3/obj/home/joff/NetBSD-3/pristine-src/sys/arch/evbarm/compile/TS7200_INSTALL
total memory = 32768 KB
avail memory = 25188 KB
mainbus0 (root)
cpu0 at mainbus0: ARM920T rev 0 (ARM9TDMI core)
cpu0: DC enabled IC enabled WB enabled EABT
cpu0: 16KB/32B 64-way Instruction cache
cpu0: 16KB/32B 64-way write-back-locking-A Data cache
epsoc0 at mainbus0: Cirrus Logic EP93xx SoC rev E0
epsoc0: fclk 200.03 Mhz hclk 100.01 Mhz pclk 50.01 Mhz
ohci0 at epsoc0 addr 0x80020000-0x80020fff intr 56
epclk0 at epsoc0 addr 0x80810000-0x8081008f intr 35
epe0 at epsoc0 addr 0x80010000-0x8001ffff intr 39
epe0: MAC address 00:d0:69:40:87:e4
ukphy0 at epe0 phy 1: Generic IEEE 802.3u media interface
ukphy0: OUI 0x0010a1, model 0x0021, rev. 9
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
epcom0 at epsoc0 addr 0x808c0000-0x808c0fff intr 52
epcom0: console
epcom1 at epsoc0 addr 0x808d0000-0x808d0fff intr 54
ohci0: OHCI version 1.0
usb0 at ohci0: USB revision 1.0
uhub0 at usb0
uhub0: Cirrus Logic OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 3 ports with 3 removable, self powered
tspld0 at mainbus0: Technologic Systems TS-7200 rev C, features 0x0
tspld0: jumpers 0x3
wdc0 at tspld0
atabus0 at wdc0 channel 0
tslcd0 at tspld0
wsdisplay0 at tslcd0 kbdmux 1
wsmux1: connecting to wsdisplay0
tskp0 at tspld0: 4x4 matrix keypad, polling at 64 hz
wskbd0 at tskp0 mux 1
wskbd0: connecting to wsdisplay0
tssd0 at tspld0: TS-SDCORE SD flash card core
isa0 at tspld0: PC/104 expansion bus
md0: internal 3075 KB image area
wd0 at atabus0 drive 0:
wd0: drive supports 4-sector PIO transfers, LBA addressing
wd0: 1953 MB, 3970 cyl, 16 head, 63 sec, 512 bytes/sect x 4001760 sectors
wd0: drive supports PIO mode 4, DMA mode 2
boot device:
root on md0a dumps on md0b
root file system type: ffs
WARNING: CHECK AND RESET THE DATE!
erase ^?, werase ^W, kill ^U, intr ^C


Case: CF Card 마운트용 커널인 netbsd-wd0.bin-TS7200 를 로드한 경우
--------------------------------------------------------------------------
>> TS-BOOTROM, Rev 1.08 - built 10:44:37, May 26 2006
>> Copyright (C) 2006, Technologic Systems
>> TS-7200: Rev E0 CPU, Rev C PLD, 32MB SDRAM

+Ethernet eth0: MAC address 00:d0:69:40:87:e4
IP: 192.168.0.50/255.255.255.0, Gateway: 192.168.0.1
Default server: 192.168.0.1

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version current-TS_5 - built 11:53:02, Jun 7 2006

Platform: TS-7200 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

RAM: 0x00000000-0x02000000, [0x00044f88-0x01fdd000] available
FLASH: 0x60000000 - 0x61000000, 128 blocks of 0x00020000 bytes each.
== Executing boot script in 0.100 seconds - enter ^C to abort
^C
RedBoot> fconfig -l
Run script at boot: true
Boot script:
.. fis load vmlinux
.. exec -c "console=ttyAM0,115200 root=/dev/mtdblock1"

Boot script timeout (100ms resolution): 1
Use BOOTP for network configuration: false
Gateway IP address: 192.168.0.1
Local IP address: 192.168.0.50
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.0.1
dns_ip: 192.168.0.1
Network hardware address [MAC]: 0x00:0xD0:0x69:0x40:0x87:0xE4
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
RedBoot> ip_address
IP: 192.168.0.50/255.255.255.0, Gateway: 192.168.0.1
Default server: 192.168.0.1
RedBoot> load -v -r -b 0x00200000 -h 192.168.0.251 -m tftp netbsd-wd0.bin-TS7200
/
Raw file loaded 0x00200000-0x004c0def, assumed entry at 0x00200000
RedBoot> go
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

pmap_postinit: Allocated 35 static L1 descriptor tables
NetBSD 3.0_STABLE (TS7200) #1: Fri Jul 21 09:59:22 MST 2006
joff@construct:/home/joff/NetBSD-3/obj/home/joff/NetBSD-3/pristine-src/sys/arch/evbarm/compile/TS7200
total memory = 32768 KB
avail memory = 28196 KB
mainbus0 (root)
cpu0 at mainbus0: ARM920T rev 0 (ARM9TDMI core)
cpu0: DC enabled IC enabled WB enabled EABT
cpu0: 16KB/32B 64-way Instruction cache
cpu0: 16KB/32B 64-way write-back-locking-A Data cache
epsoc0 at mainbus0: Cirrus Logic EP93xx SoC rev E0
epsoc0: fclk 200.03 Mhz hclk 100.01 Mhz pclk 50.01 Mhz
ohci0 at epsoc0 addr 0x80020000-0x80020fff intr 56
epclk0 at epsoc0 addr 0x80810000-0x8081008f intr 35
epe0 at epsoc0 addr 0x80010000-0x8001ffff intr 39
epe0: MAC address 00:d0:69:40:87:e4
ukphy0 at epe0 phy 1: Generic IEEE 802.3u media interface
ukphy0: OUI 0x0010a1, model 0x0021, rev. 9
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
epcom0 at epsoc0 addr 0x808c0000-0x808c0fff intr 52
epcom0: console
epcom1 at epsoc0 addr 0x808d0000-0x808d0fff intr 54
ohci0: OHCI version 1.0
usb0 at ohci0: USB revision 1.0
uhub0 at usb0
uhub0: Cirrus Logic OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 3 ports with 3 removable, self powered
tspld0 at mainbus0: Technologic Systems TS-7200 rev C, features 0x0
tspld0: jumpers 0x3
wdc0 at tspld0
atabus0 at wdc0 channel 0
tslcd0 at tspld0
wsdisplay0 at tslcd0 kbdmux 1
wsmux1: connecting to wsdisplay0
tskp0 at tspld0: 4x4 matrix keypad, polling at 64 hz
wskbd0 at tskp0 mux 1
wskbd0: connecting to wsdisplay0
tssd0 at tspld0: TS-SDCORE SD flash card core
isa0 at tspld0: PC/104 expansion bus
wd0 at atabus0 drive 0:
wd0: drive supports 4-sector PIO transfers, LBA addressing
wd0: 1953 MB, 3970 cyl, 16 head, 63 sec, 512 bytes/sect x 4001760 sectors
wd0: drive supports PIO mode 4, DMA mode 2
boot device:
root on wd0a dumps on wd0b
WARNING: CHECK AND RESET THE DATE!
Sat Jul 22 02:55:44 KST 2006
swapctl: adding /dev/wd0b as swap device at priority 0
Checking for botched superblock upgrades: done.
Starting file system checks:
/dev/rwd0a: file system is clean; not checking
Setting tty flags.
Setting sysctl variables:
Starting network.
Hostname: ts-7200.
IPv6 mode: host
Configuring network interfaces: epe0.
add net default: gateway 192.168.0.1
Adding interface aliases:
Building databases...
Starting syslogd.
Checking for core dump...
savecore: can't find device 365/452205
Jul 22 02:55:53 ts-7200 savecore: can't find device 365/452205
Mounting all filesystems...
Clearing /tmp.
Creating a.out runtime link editor directory cache.
Checking quotas: done.
Setting securelevel: kern.securelevel: 0 -> 1
Starting virecover.
Starting local daemons:.
Updating motd.
Starting sendmail.
Starting inetd.
Starting cron.
Sat Jul 22 02:56:00 KST 2006

NetBSD/evbarm (ts-7200.) (console)

login:

Case: custom 커널을 로드한 경우
----------------------------------
>> TS-BOOTROM, Rev 1.08 - built 10:44:37, May 26 2006
>> Copyright (C) 2006, Technologic Systems
>> TS-7200: Rev E0 CPU, Rev C PLD, 32MB SDRAM

+Ethernet eth0: MAC address 00:d0:69:40:87:e4
IP: 192.168.0.50/255.255.255.0, Gateway: 192.168.0.1
Default server: 192.168.0.1

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version current-TS_5 - built 11:53:02, Jun 7 2006

Platform: TS-7200 Board (ARM920T) Rev A
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

RAM: 0x00000000-0x02000000, [0x00044f88-0x01fdd000] available
FLASH: 0x60000000 - 0x61000000, 128 blocks of 0x00020000 bytes each.
== Executing boot script in 0.100 seconds - enter ^C to abort
^C
RedBoot> load -v -r -b 0x00200000 -h 192.168.0.251 -m tftp netbsd-wd0.bin

Raw file loaded 0x00200000-0x007b992f, assumed entry at 0x00200000
RedBoot> go
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.

NetBSD 3.1 (TS7200_INSTALL) #0: Fri May 11 20:11:11 KST 2007
pjy@netbsd.myhome:/usr/obj/sys/arch/evbarm/compile/TS7200_INSTALL
total memory = 32768 KB
avail memory = 25220 KB
mainbus0 (root)
cpu0 at mainbus0: ARM920T rev 0 (ARM9TDMI core)
cpu0: DC enabled IC enabled WB enabled EABT
cpu0: 16KB/32B 64-way Instruction cache
cpu0: 16KB/32B 64-way write-back-locking-A Data cache
epsoc0 at mainbus0: Cirrus Logic EP93xx SoC rev E0
epsoc0: fclk 200.03 Mhz hclk 100.01 Mhz pclk 50.01 Mhz
ohci0 at epsoc0 addr 0x80020000-0x80020fff intr 56
epclk0 at epsoc0 addr 0x80810000-0x8081008f intr 35
epe0 at epsoc0 addr 0x80010000-0x8001ffff intr 39
epe0: MAC address 00:d0:69:40:87:e4
ukphy0 at epe0 phy 1: Generic IEEE 802.3u media interface
ukphy0: OUI 0x0010a1, model 0x0021, rev. 9
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
epcom0 at epsoc0 addr 0x808c0000-0x808c0fff intr 52
epcom0: console
epcom1 at epsoc0 addr 0x808d0000-0x808d0fff intr 54
ohci0: OHCI version 1.0
usb0 at ohci0: USB revision 1.0
uhub0 at usb0
uhub0: Cirrus Logic OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 3 ports with 3 removable, self powered
tspld0 at mainbus0: Technologic Systems TS-7200 rev C, features 0x0
tspld0: jumpers 0x3
isa0 at tspld0: PC/104 expansion bus
wdc0 at tspld0
atabus0 at wdc0 channel 0
tslcd0 at tspld0
wsdisplay0 at tslcd0 kbdmux 1
wsmux1: connecting to wsdisplay0
tskp0 at tspld0: 4x4 matrix keypad, polling at 64 hz
wskbd0 at tskp0 mux 1
wskbd0: connecting to wsdisplay0
md0: internal 3075 KB image area
wd0 at atabus0 drive 0:
wd0: drive supports 4-sector PIO transfers, LBA addressing
wd0: 1953 MB, 3970 cyl, 16 head, 63 sec, 512 bytes/sect x 4001760 sectors
wd0: drive supports PIO mode 4, DMA mode 2
boot device:
root on wd0a dumps on wd0b
WARNING: CHECK AND RESET THE DATE!
Sat Jul 22 10:16:13 KST 2006
swapctl: adding /dev/wd0b as swap device at priority 0
Checking for botched superblock upgrades: done.
Starting file system checks:
/dev/rwd0a: file system is clean; not checking
Setting tty flags.
Setting sysctl variables:
Starting network.
Hostname: ts-7200.
IPv6 mode: host
Configuring network interfaces: epe0.
add net default: gateway 192.168.0.1
Adding interface aliases:
Building databases...
wsdisplay0: screen 1 added (std_tslcd, vt100 emulation)
wsdisplay0: screen 2 added (std_tslcd, vt100 emulation)
wsdisplay0: screen 3 added (std_tslcd, vt100 emulation)
wsdisplay0: screen 4 added (std_tslcd, vt100 emulation)
Starting syslogd.
Checking for core dump...
savecore: can't find device 0/0
Jul 22 10:16:22 ts-7200 savecore: can't find device 0/0
Mounting all filesystems...
Clearing /tmp.
Creating a.out runtime link editor directory cache.
Checking quotas: done.
Setting securelevel: kern.securelevel: 0 -> 1
Starting virecover.
Starting local daemons:.
Updating motd.
Starting sendmail.
Starting inetd.
Starting cron.
Sat Jul 22 10:16:31 KST 2006

NetBSD/evbarm (ts-7200.) (console)

login:


ps) 참고로 저는 RTC를 위해서 TS5620을 같이 구입했는데 해당 하드웨어를 TS-7200에 설치하고 부팅하면 다음 메시지가 나옵니다.

>> TS-BOOTROM, Rev 1.08 - built 10:44:37, May 26 2006
>> Copyright (C) 2006, Technologic Systems
>> TS-7200: Rev E0 CPU, Rev C PLD, 32MB SDRAM
>> TS-5620: detected, battery OK, time ( 11:59:54, May 11 2007 )
....
tsrtc0 at tspld0: mc146818 compatible time-of-day clock

NetBSD 설치하기

Reference: http://www.embeddedarm.com/~joff/
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.1/evbarm/INSTALL.html 도 설치 관련한 문서이지만 이것 때문에 처음에 상당한 혼란이 왔습니다. 그것뿐만 아니라 binary 설치 파일도 netbsd의 것과 ftp.embeddedarm.com 의 것이 또 달랐습니다. 두개 문서를 1주일동안 외우다시피 보고 또 그것가지고는 아직 설치 계획이 떠오르지 않아서 http://tech.groups.yahoo.com/group/ts-7000/ 의 메일링리스트를 뒤져서 겨우 방법을 알아냈습니다. 제가 원하고 발견한 방법은 다음과 같습니다.

1. 기설치된 flash memory내의 리눅스에 대해서는 어떠한 변경도 가하지 않는다.
2. CF Card를 설치해서 NetBSD 프로그램을 설치한다.
3. Kernel은 tftp로 다운로드 받아서 기동한다.

요약하자면, 물 건너온 이녀석에 대해서 기 설치된 Linux 커널을 손대지 않고 NetBSD를 쓰는게 목적이죠. 그럴수밖에 없는게 이미 설치된 Linux 커널이 정확히 어떤 것인지 알 수가 없었고 또 괜히 바꾸었다가 Linux로의 부팅도 되지 않을거 같은 불안한 마음 때문에 어쩔수가 없었습니다. 이런말 하기 좀 그렇지만 물어볼 사람도 없구요^^

설치 단계는 다음과 같습니다.

1. NetBSD를 CF Card에 설치하기 위한 kernel load
2. CF Card로의 부팅용 kernel을 tftp에서 다운로드 받아서 사용
3. Post installation

각 단계별로 자세하게 살펴보면,

단계 1) NetBSD를 CF Card에 설치하기 위한 kernel load
---------------------------------------------------------
1st. 자기 PC에 ftp://ftp.embeddedarm.com/evbarm/installation/instkernel/netbsd-TS7200_INSTALL.bin 를 다운로드 받습니다.
2nd. PC 에 tftp를 기동하고 준비합니다.
ex) My PC IP = 192.168.0.251
3rd. TS-7200 을 부팅하자마자 Ctrl-C를 눌러서 Redboot Command 모드로 진입한후 다음 명령어를 입력합니다. 참고로 TS-7200 디폴트 IP address는 192.168.0.50 입니다.

RedBoot> load -v -r -b 0x00200000 -h 192.168.0.251 netbsd-TS7200_INSTALL.bin
RedBoot> go

단계 2) CF Card로의 부팅용 kernel을 tftp에서 다운로드 받아서 사용
----------------------------------------------------------------------
단계 1)에서 CF Card로 NetBSD 프로그램을 설치하게 됩니다. 이부분은 다음에 한번 써야 될거 같네요. 일단 설치가 제대로 되었다고 가정하고 재부팅을 한다음에 다시 Ctrl-C를 눌러서 Redboot Command 모드로 진입한 다음 다음 명령어를 입력합니다. 그전에 우선 ftp://ftp.embeddedarm.com/evbarm/binary/kernel/netbsd-wd0.bin-TS7200.gz 를 미리 자기 PC에 다운로드 받습니다.

RedBoot> load -v -r -b 0x00200000 -h 192.168.0.251 -m tftp netbsd-wd0.bin-TS7200
RedBoot> go

단계 3) Post installation
-------------------------
이건 사실 키패드를 사지 않았다면 불필요한 사항인데 전 LCD랑 키패드도 같이 구입을 한 상태여서 LCD 관련 driver를 생성해야 합니다.

# /dev/MAKEDEV tslcd
# ls -al /dev/tsl*
crw-rw---- 1 root wheel 108, 0 Jul 22 06:19 tslcd0

이렇게 생성하는 이유는 단계1에서 설치한 NetBSD 프로그램내에 위의 driver가 설치되어 있지 않은 상태로 되어 있어서 그렇게 하면 되고 사용법은 메일링 리스트에 Jesse Off 가 올린 글에 따르면 다음과 같습니다.

Hitachi HD44780 LCD driver, /dev/tslcd0. You can just echo -n "foo" > /dev/tslcd0, or do more complex manipulations using ioctl()'s if you connect an LCD up to the LCD header.

TS-7200 사용수기를 시작하면서

우연한 기회에 FreeBSD를 접하게 되면서 기존에 어렵게 혼자서 Linux를 사용해오던 환경을 접고 BSD의 매력에 푹 빠져 집에서 쓰지 않는 386 PC에 FreeBSD를 설치해서 1년 가까이 지켜보면서 배우게 되었습니다. 그러다 OpenBSD, NetBSD라는게 또 있다는 것을 알게되고 이것도 역시 설치해서 쓰다가 최근에 NetBSD의 gallery란에 신기한 Single Board Computer를 보고 이젠 저것을 가지고 놀아볼 생각으로 해외 주문으로 사게되었죠. 관세까지 물어가면서... 그런데 써보면 써볼수록 참 재미있는 보드라는 생각이 듭니다. 크기도 작고 CF Card를 달면 완전 데스크탑 수준으로도 손색이 없는 것 같습니다. 보통 임베디드 시스템이라고 하면 Linux를 많이 생각하게 되는데 솔직히 성능만 놓고 본다면 훨씬 낫습니다. 하지만 전 목적이 NetBSD가 OS로 설치되어 운영되는 임베디드 보드를 가지고 놀 목적이기 때문에 그건 별로 문제가 되질 않습니다. 성능이라고 하는 것도 따지고 보면 부팅 시간이 얼마나 빠르냐 인데 그이후에는 오히려 환경이 NetBSD가 훨씬 유연하다는 느낌이 듭니다.

참고로 현재 TS-7200 을 지원하는 스펙은 다음과 같습니다.

- On-CPU RS232 UARTs (2) (epcom)
- On-CPU 10/100 Ethernet MAC (epe)
- CompactFlash socket (wdc)
- USB 1.1 ports (2) (ohci)
- Watchdog timer on CPLD (tspld)
- TMP124 high precision temperature sensor via sysctl
- 64Hz system clock from on-CPU timers (epclk)
- HD44780 2x24 text mode LCD (tslcd)
- 4x4 16 button matrix keypad (wskbd)
- TS-5620 battery backed RTC daughter-card (tsrtc)
- 1,2,4 port serial TS-SER daughter cards (com)
- Up to 4 10Mb TS-ETH10 daughter cards (tscs)
- Other devices inserted into the PC/104 (isa) expansion slot