Intel Edisonでシリアル文字出力
さて、EdisonでもNetBSDやりたいねと。
まずは、シリアルから一文字出して気分を盛り上げたいところです。
u-bootのコマンドプロンプトから行った、シリアルコンソールのアドレス0xff010180に0x40を書き込んで@を出しましょう。
sys/arch/i386/i386/locore.Sにベタな感じで書いてみました。
EdisonをLinuxで起動し、scpを使ってnetbsd.binを転送後、/にコピーして再起動。
実は、u-bootのときに気付いたのですが、0xff010180に0x40を書き込む際に、以前はmm.lを使って書き込んでいたのですが、それだとうまくいきません。
mm.bを使わなければなりませんでした。
u-bootでmd.l 0xff010180してみるとこんな感じです。
なので、32bit単位で書き込むとおかしな表示になってしまいます。
だとしたら、シリアルコンソールドライバをcomでラクできないってことに...
まずは、シリアルから一文字出して気分を盛り上げたいところです。
u-bootのコマンドプロンプトから行った、シリアルコンソールのアドレス0xff010180に0x40を書き込んで@を出しましょう。
sys/arch/i386/i386/locore.Sにベタな感じで書いてみました。
--- sys/arch/i386/i386/locore.S.orig 2014-10-29 03:49:31.000000000 +0000 +++ sys/arch/i386/i386/locore.S 2014-11-03 11:37:11.000000000 +0000 @@ -304,6 +304,10 @@ jmp 2f #endif + /* serial console put '@' */ + movl $0xff010180, %eax + movb $0x40, (%eax) + 1: /* * At this point, we know that a NetBSD-specific boot loader./build.sh -m i386 kernel=EDISONなんて感じでkernelを作って
# /usr/obj/tooldir.NetBSD-7.99.1-amd64/i486--netbsdelf/bin/objcopy -I elf32-i386 -O binary /usr/obj/sys/arch/i386/compile/EDISON/netbsd /tmp/netbsd.binって感じでbinary形式のkenrelを作ります。
EdisonをLinuxで起動し、scpを使ってnetbsd.binを転送後、/にコピーして再起動。
Poky (Yocto Project Reference Distro) 1.6 edison ttyMFD2 edison login: root root@edison:~# scp tokuda@192.168.0.106:/tmp/netbsd.bin . netbsd.bin 100% 14MB 614.6KB/s 00:23 root@edison:~# cp netbsd.bin / root@edison:~# md5sum /netbsd.bin ./netbsd.bin 5d8163b95315ca2944d5a3be89ccefb7 /netbsd.bin 5d8163b95315ca2944d5a3be89ccefb7 ./netbsd.bin root@edison:~# sync root@edison:~# rebootさきほど書き込んだ/netbsd.binはmmcblk0p8なのでu-boot的にはmmc 0:8って感じになるようで、次のような手順でブートしました。
U-Boot 2014.04 (Sep 08 2014 - 14:09:10) Watchdog enabled DRAM: 980.6 MiB MMC: tangier_sdhci: 0 In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 boot > boot > ext4load mmc 0:8 100000 netbsd.bin 14473916 bytes read in 12736 ms (1.1 MiB/s) boot > go 100000 ## Starting application at 0x00100000 ... @おー、ちゃんと@が表示されましたねー。
実は、u-bootのときに気付いたのですが、0xff010180に0x40を書き込む際に、以前はmm.lを使って書き込んでいたのですが、それだとうまくいきません。
mm.bを使わなければなりませんでした。
u-bootでmd.l 0xff010180してみるとこんな感じです。
boot > md.l 0xff010180 4 ff010180: 03c10200 00110003 00000000 00000000 ................レジスタの最初のほうに0x03c102が入っています。
なので、32bit単位で書き込むとおかしな表示になってしまいます。
boot > mm.l 0xff010180 ff010180: 03c10200 ? 40 &1,8M ア 0lで、うーんと思って試しに0x03c102を変更せず、下位8bitだけを変更してうまくいったわけです。
boot > mm.l 0xff010180 ff010180: 03c10200 ? 03c10240 @ff010184: 00110003 ? . boot >もしかすると、このシリアルコンソールってcomドライバではないってことですかね。
だとしたら、シリアルコンソールドライバをcomでラクできないってことに...
- TB-URL http://www.tokuda.net/diary/0850/tb/
1: Andy 2016年01月20日(水) 午前7時14分
Have you seen this one: https://www.reddit.com/r/freebsd/comments/3xktgm/freebsd_on_intel_edison_has_anyone_tried_doing/