コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2014年8月11日 >>> 2014年8月2日
link もっと後

2014年8月9日

IntelliJ IDEAでコピーができない

IntelliJ IDEAのConsoleウインドウのコピー処理でハマりました。

Null文字をprintすると(例えばSystem.out.printf("%c", (char)0); など)、Ctrl+A, Ctrl+Cとキーを押して Consoleの出力結果を全コピーしようとしても、Null文字以降がコピーされません。何これ…困るわ。

バグ?仕様??

メモ: 技術系?の話はFacebookから転記しておくことにした。

編集者:すずき(2014/08/14 10:23)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年8月8日

CodeSourceryに代わってLinaroのARMクロスコンパイラを使う

目次: GCC

組み込み系CPU向けクロスコンパイラの定番といえばCodeSourceryですが、ダウンロードのページに行くためにはユーザー登録が必要で、面倒くさいよー、という方も居ると思います。

ARM向けに限りますが、別の選択肢としてLinaroが公開しているクロスコンパイラという手があります。CodeSourcery同様にお手軽に使えるPrebuild版も用意してくれていますので、使い方には困らないと思います。

LinaroのクロスコンパイラでARM用カーネルビルド
# 取得する
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.15.tar.xz
wget http://releases.linaro.org/14.07/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.xz

# 展開する
tar xJvf linux-3.14.15.tar.xz
tar xJvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.xz

# ビルドする
export ARCH=arm
export CROSS_COMPILE=/home/katsuhiro/share/arm_cross/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin/arm-linux-gnueabihf-

cd linux-3.14.15
make KBUILD_DEFCONFIG=versatile_defconfig defconfig
make -j4

ビルド成功したようなので、自作ARMv5エミュレータに放り込んでみました。

Linux 3.14 on自作エミュレータ
Connected to the target VM, address: '127.0.0.1:49748', transport: 'socket'
Exception: Reset by 'Init.'.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.15 (katsuhiro@falcon) (gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) ) #1 Fri Aug 8 15:38:54 JST 2014
[    0.000000] CPU: ARM926EJ-S [41069260] revision 0 (ARMv5TEJ), cr=00003137
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: ARM-Versatile PB
[    0.000000] Ignoring unrecognised tag 0x00000000
[    0.000000] Memory policy: Data cache writeback
[    0.000000] On node 0 totalpages: 16384
[    0.000000] free_area_init_node: node 0, pgdat c03c4ce8, node_mem_map c3f7a000
[    0.000000]   Normal zone: 128 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 16384 pages, LIFO batch:3
[    0.003317] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns
[    0.029105] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.031450] pcpu-alloc: [0] 0 
[    0.042642] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
[    0.045733] Kernel command line: console=ttyAMA0 mem=64M lpj=0 root=/dev/nfs debug printk.time=1
[    0.093627] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.109772] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.173519] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.734098] Memory: 60952K/65536K available (2817K kernel code, 157K rwdata, 732K rodata, 115K init, 116K bss, 4584K reserved)
[    0.754145] Virtual kernel memory layout:
[    0.754145]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.754145]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.754145]     vmalloc : 0xc4800000 - 0xff000000   ( 936 MB)
[    0.754145]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.754145]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.754145]       .text : 0xc0008000 - 0xc037f900   (3551 kB)
[    0.754145]       .init : 0xc0380000 - 0xc039ccd4   ( 116 kB)
[    0.754145]       .data : 0xc039e000 - 0xc03c5420   ( 158 kB)
[    0.754145]        .bss : 0xc03c5420 - 0xc03e2774   ( 117 kB)
[    0.835624] NR_IRQS:224
[    1.433660] VIC @f1140000: id 0x00041190, vendor 0x41
[    1.480147] FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs, parent IRQ: 63
[    1.600891] Console: colour dummy device 80x30
[    1.608749] Calibrating delay loop... 6.52 BogoMIPS (lpj=32640)
[    2.220671] pid_max: default: 32768 minimum: 301
[    2.257974] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    2.263175] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    2.424212] CPU: Testing write buffer coherency: ok
[    2.471352] Setting up static identity map for 0x802ae5b8 - 0x802ae610
[    3.001781] VFP support v0.3: no double precision support
[    3.085927] NET: Registered protocol family 16
[    3.237579] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    3.885257] Serial: AMBA PL011 UART driver
[    3.909160] dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1
[    4.214325] console [ttyAMA0] enabled
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    4.292449] dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    4.371940] dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    4.454404] fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1
[    5.788310] bio: create slab <bio-0> at 0
SYS_LED: 0x000000ff
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
SYS_LED: read 0x00000000
[    6.329351] Switched to clocksource timer3
[    8.419343] NET: Registered protocol family 2
[    8.592061] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[    8.613714] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
[    8.632315] TCP: Hash tables configured (established 1024 bind 1024)
[    8.652642] TCP: reno registered
[    8.659583] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    8.675257] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    8.750198] NET: Registered protocol family 1
[    8.820467] RPC: Registered named UNIX socket transport module.
[    8.827386] RPC: Registered udp transport module.
[    8.833482] RPC: Registered tcp transport module.
[    8.839809] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    8.932090] NetWinder Floating Point Emulator V0.97 (double precision)
[    9.113116] futex hash table entries: 256 (order: -1, 3072 bytes)
Exception: Data abort by 'MMU trans sec, paL1:0x80004000, entryL1:0x00000000, va:0x00000000, dom:0, inst:dat, priv:user, read:rd.'.
[    9.275864] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
[    9.309731] jffs2: version 2.2. (NAND) Ac 2001-2006 Red Hat, Inc.
[    9.368658] ROMFS MTD (C) 2007 Red Hat, Inc.
[    9.378358] msgmni has been set to 119
[    9.461972] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[    9.469946] io scheduler noop registered
[    9.475694] io scheduler deadline registered
[    9.485652] io scheduler cfq registered (default)
Exception in thread "main" java.lang.IllegalArgumentException: Illegal address 0x00000410.
	at net.katsuster.semu.Controller64Reg32.isValidReg(Controller64Reg32.java:57)
	at net.katsuster.semu.GPIO.tryAccess(GPIO.java:79)
	at net.katsuster.semu.GPIO.tryWrite(GPIO.java:69)
	at net.katsuster.semu.Bus64.tryWrite(Bus64.java:168)
	at net.katsuster.semu.MasterCore64.tryWrite(MasterCore64.java:96)
	at net.katsuster.semu.ARMv5.executeStrb(ARMv5.java:3303)
	at net.katsuster.semu.ARMv5.executeSubLdrStr(ARMv5.java:4492)
	at net.katsuster.semu.ARMv5.executeInst(ARMv5.java:4074)
	at net.katsuster.semu.ARMv5.execute(ARMv5.java:4055)
	at net.katsuster.semu.ARMv5.step(ARMv5.java:5201)
	at net.katsuster.semu.CPU.run(CPU.java:158)
	at net.katsuster.semu.Main.main(Main.java:252)
java.lang.IllegalArgumentException: Illegal address 0x00000410.
pc:c0179db4
Disconnected from the target VM, address: '127.0.0.1:49748', transport: 'socket'

Process finished with exit code 1

GPIOデバイスにアクセスに行くらしく途中で怒られました。GPIOなんて何に使っているんでしょう?他にもボードのLEDを光らせるみたいですが、何したいんだろう…これ。

編集者:すずき(2024/03/05 02:32)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年8月3日

自作ARMv5エミュレータ(途中)

目次: Linux

せっかく組み込み屋さんやってるんだから、何か一つ組み込みっぽいことでもしようと思い立ち、ARMのエミュレータを書き始めて、はや2ヶ月が経ちました。

Linuxのブートの途中まで動いたみたい
Connected to the target VM, address: '127.0.0.1:52615', transport: 'socket'
Exception: Reset by 'Init.'.
I&D-cache: all invalidated.
I&D-TLB  : all invalidated.
TTBR0    : 0x80004000.
  base   : 0x20001.
SCTLR    : 0x3137.
  V      : true.
  R      : false.
  S      : true.
  A      : true.
  M      : true.
D-TLB    : all invalidated.
I-TLB    : all invalidated.
VICITCR: 0x00000000
VICVECTCNTL[0]: 0x00000020
VICVECTCNTL[1]: 0x00000021
VICVECTCNTL[2]: 0x00000022
VICVECTCNTL[3]: 0x00000023
VICVECTCNTL[4]: 0x00000024
VICVECTCNTL[5]: 0x00000025
VICVECTCNTL[6]: 0x00000026
VICVECTCNTL[7]: 0x00000027
VICVECTCNTL[8]: 0x00000028
VICVECTCNTL[9]: 0x00000029
VICVECTCNTL[10]: 0x0000002a
VICVECTCNTL[11]: 0x0000002b
VICVECTCNTL[12]: 0x0000002c
VICVECTCNTL[13]: 0x0000002d
VICVECTCNTL[14]: 0x0000002e
VICVECTCNTL[15]: 0x0000002f
VICDEFVECTADDR: 0x00000020
SIC_ENCLR: 0xffffffff
SIC_PICENSET: 0xffd00000
Timer1Control: 0x00000000
Timer2Control: 0x00000000
Timer1Control: 0x00000000
Timer2Control: 0x00000000
Timer2Control: 0x00000000
Timer2Load: 0xffffffff
Timer2Value: 0xffffffff
Timer2Control: 0x000000c2
Timer1Control: 0x00000000
Timer1Control: 0x00000022
Timer1Control: 0x00000022
Timer1Control: 0x00000022
Timer1Load: 0x00002710
Timer1Control: 0x000000e2
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
UARTFBRD: 0x00000004
UARTIBRD: 0x00000027
UARTLCR_H: 0x00000070
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.12.20 (katsuhiro@falcon) (gcc version 4.8.1 (Sourcery CodeBench Lite 2013.11-33) ) #1 Sun Jun 1 00:39:50 JST 2014
[    0.000000] CPU: ARM926EJ-S [41069260] revision 0 (ARMv5TEJ), cr=00003137
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: ARM-Versatile PB
[    0.000000] Ignoring unrecognised tag 0x00000000
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] On node 0 totalpages: 16384
[    0.000000] free_area_init_node: node 0, pgdat c03a801c, node_mem_map c03c5000
[    0.000000]   Normal zone: 128 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 16384 pages, LIFO batch:3
[    0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0 
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
[    0.000000] Kernel command line: console=ttyAMA0 mem=64M lpj=0 root=/dev/nfs debug printk.time=1
[    0.000000] PID hash table entries: 256 (order: -2, 1024 bytes)
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Memory: 61064K/65536K available (2732K kernel code, 153K rwdata, 708K rodata, 114K init, 111K bss, 4472K reserved)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc4800000 - 0xff000000   ( 936 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc03647b8   (3442 kB)
[    0.000000]       .init : 0xc0365000 - 0xc03819dc   ( 115 kB)
[    0.000000]       .data : 0xc0382000 - 0xc03a8740   ( 154 kB)
[    0.000000]        .bss : 0xc03a8740 - 0xc03c4624   ( 112 kB)
[    0.000000] NR_IRQS:224
[    0.000000] VIC @f1140000: id 0x00041190, vendor 0x41
[    0.000000] FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs
[    0.000000] Console: colour dummy device 80x30
[    1.562791] Calibrating delay loop... 6.52 BogoMIPS (lpj=32640)
[    2.099243] pid_max: default: 32768 minimum: 301
[    2.130496] Mount-cache hash table entries: 512
[    2.273627] CPU: Testing write buffer coherency: ok
[    2.315394] Setting up static identity map for 0xc0299720 - 0xc0299778
[    2.672739] VFP support v0.3: no double precision support
[    2.734862] NET: Registered protocol family 16
[    2.873316] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    3.345429] Serial: AMBA PL011 UART driver
[    3.362809] dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1
[    3.628990] console [ttyAMA0] enabled
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    3.681619] dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    3.735775] dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1
UARTIMSC: 0x00000000
UARTICR: 0x0000ffff
[    3.796222] fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1
[    4.796654] bio: create slab <bio-0> at 0
[    5.084143] Switched to clocksource timer3
[    6.655203] NET: Registered protocol family 2
[    6.825171] TCP established hash table entries: 512 (order: 0, 4096 bytes)
[    6.840762] TCP bind hash table entries: 512 (order: -1, 2048 bytes)
[    6.853819] TCP: Hash tables configured (established 512 bind 512)
[    6.871232] TCP: reno registered
[    6.877328] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    6.891042] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    6.958240] NET: Registered protocol family 1
[    7.029488] RPC: Registered named UNIX socket transport module.
[    7.035967] RPC: Registered udp transport module.
[    7.041442] RPC: Registered tcp transport module.
[    7.047158] RPC: Registered tcp NFSv4.1 backchannel transport module.
java.lang.IllegalArgumentException: Sorry, not implemented.
pc:c016ed88
Disconnected from the target VM, address: '127.0.0.1:52615', transport: 'socket'
Exception in thread "main" java.lang.IllegalArgumentException: Sorry, not implemented.
	at net.katsuster.semu.ARMv5.executeLdrbt(ARMv5.java:2625)
	at net.katsuster.semu.ARMv5.executeSubLdrStr(ARMv5.java:4227)
	at net.katsuster.semu.ARMv5.executeInst(ARMv5.java:3833)
	at net.katsuster.semu.ARMv5.execute(ARMv5.java:3814)
	at net.katsuster.semu.ARMv5.step(ARMv5.java:4961)
	at net.katsuster.semu.CPU.run(CPU.java:158)
	at net.katsuster.semu.Main.main(Main.java:222)

Process finished with exit code 1

空き時間でチマチマ実装して、ようやくLinuxブートの途中でクラッシュする、微妙な何かが動くところまで辿り着きました。

この先に進むにはldrt命令が要るようなので、いよいよサボっていたMMUを実装するときが来たようです。しかしまあCPUもMMUも周辺コアもスタブだらけでほぼ実装していないのに、よくここまで動きますね。Linuxってすごいのか適当なのか…。

方針

きっと古いCPUの方が単純だろうという単純な考えで、CPUはARM9(アーキテクチャで言うとARMv5)、ボードはARM Versatile-AB/PBという開発ボードをエミュレーションのターゲットにしました。ボードの実物見たこと無いですが、実物が要る機会なんてそうそう無いでしょう…。

なんとCPU、周辺機器、ボードの仕様書、マニュアルは、ARMのサイトからタダでダウンロードできてしまいます。アカウントの登録は要りますけど、タダなのが素晴らしいです。

どこから作るか

よっしゃ、俺も作ったるわ!という変な人はまず居ないと思いますが、もし作るならCPUの作り込みは程々にして、周辺機器、特にタイマー、UART辺りと繋がる方法を先に考えることをオススメします。

Linuxのブートメッセージを拝むにはCPUだけではダメで、UARTを作らないとメッセージが出力できませんし、タイマー割り込みが入らないとBogoMIPSの測定が終わらず、ブートメッセージが出る前にカーネルがハング(※)してしまうからです。

なぜブートメッセージにこだわるかというと、趣味のやる気を維持するには「進んでる、楽しい!」という感覚を繰り返すことが大事でして、エミュレータならLinuxのブートメッセージがどこまで出たか?という指標が、作業の手応えとして結構良いからです。

動くのか動かないのかさっぱりわからないまま、延々と実装する方が楽しいという方は、どこから作り始めても問題ないです。が、大抵の方にとってそれは「苦行」以外の何者でもないですよね。

(※)コマンドラインにlpj=1000とか0以外の数字を与えてBogoMIPSの測定をスキップする、という手もあります。

編集者:すずき(2024/03/05 02:31)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2014年8月2日

リアル脱出ゲーム

友人とリアル脱出ゲーム(主催社SCRAPのサイト)に行きました。参加したのは「DEATH NOTE×リアル脱出ゲーム 新世界の神からの脱出」です。友人にチケットを取ってもらい、一人3,100円でした。

「脱出ゲーム」の名から、部屋をうろうろしてヒントを探し回るゲームかな?と思っていましたが、部屋を探し回ることはほぼなく、机でクイズを解き続けるタイプのゲームでした。

制限時間は1時間で残念ながらクリアはならず。最後に答えを教えてくれますが、解けるのかこんなの?って難易度でした。レイトン教授シリーズが得意な人は、向いているかも知れません。

登録商標

調べていて、へえーと思ったのが「リアル脱出ゲーム」がSCRAPの登録商標になっていることでした。この単語はおいそれと使えないようです。

このゲームを説明できる単語は無いような気がします。もしNHKが取り上げるとしたら、このゲームを何と言って紹介するのだろうか??

編集者:すずき(2014/08/03 17:25)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2014年8月11日 >>> 2014年8月2日
link もっと後

管理用メニュー

link 記事を新規作成

<2014>
<<<08>>>
-----12
3456789
10111213141516
17181920212223
24252627282930
31------

最近のコメント5件

  • link 21年3月13日
    すずきさん (03/05 15:13)
    「あー、このプログラムがまずいんですね。ご...」
  • link 21年3月13日
    emkさん (03/05 12:44)
    「キャストでvolatileを外してアクセ...」
  • link 24年1月24日
    すずきさん (02/19 18:37)
    「簡単にできる方法はPowerShellの...」
  • link 24年1月24日
    KKKさん (02/19 02:30)
    「追伸です。\nネットで調べたらマイクロソ...」
  • link 24年1月24日
    KKKさん (02/19 02:25)
    「私もエラーで困ってます\n手動での回復パ...」

最近の記事3件

  • link 24年3月25日
    すずき (03/26 03:20)
    「[Might and Magic Book One TASのその後] 目次: Might and Magicファミコン版以前(...」
  • link 21年10月4日
    すずき (03/26 03:14)
    「[Might and Magicファミコン版 - まとめリンク] 目次: Might and Magicファミコン版TASに挑...」
  • link 24年3月19日
    すずき (03/20 02:52)
    「[モジュラージャックの規格] 古くは電話線で、今だとEthernetで良く見かけるモジュラージャックというコネクタとレセプタク...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 03/26 03:20