rt5350f 如何与esmt的mlx90614引脚如何区分相联

全国收购ESMT芯片
回收内存闪存存储器芯片IC及工厂呆料芯片库存回收公司长期现金收购倒闭电子工厂、积压库存、等库存。长期现金高价回收:&厂家库存呆料等一切电子元件&(主营产品)经销以下品&牌;SAMSUNG,skHYNIX,ALT
您可能感兴趣的产品
勤友热搜词お約束ですが、このページのいかなる記載においても著者は一切の責任をおいません。
HARD OFFでFON2305EというWifiルーターを525円で購入してみたので、その中身を調
べてみました。このルーターはiPhoneのおまけでSoftbankが配布していたようです。
このルーターはRalinkというメーカーのRT3050Fというチップで作られている。
ほとんどの機能がこのチップに含まれていて、外部にはフラッシュとDRAMと
Ethernetのモジュールが主要な部品になっています。
足のゴムをはがすとT6のトルクスのねじがありこれを外すと分解できます。
このモジュールのシリアルとJTAGらしき端子は一目瞭然ですぐにシリアル
コンソールは確認できました。ボーレートは5Vのインターフェースの
ようです。チップ実装面でコネクタ側を下にするとVCC,RX,GND,TXのならびに
なっています。写真はストロベリー?リナックスのFT2232Hのモジュールと接続
したところです。このモジュールは3.3VなのでTX,RX,GNDを接続してCTS,RTSを
ループさせています。
シリアルコンソールでU-Bootを使っている事が確認できたのですが、OS起動後も
シリアルからの入力を受け付けないコンフィグレーションになっているようでブート
時も入力でオートブートを止める事ができません。。。
いろいろ試していたところ、電源投入時にWPSボタンを押しているとU-Bootでhttp
サーバが起動され、192.168.0.250でファームのアップロードフォームが表示され
るようです。(後日記入:この機能は動作しないようです。)
sh-3.2$ sudo cu -l /dev/cu.usbserial-000011FDA -s 57600
Connected.
U-Boot 1.1.3 (Nov 29 2009 - 20:59:38)
Board: Fonera
relocate_code Pointer at: 81fac000
spi_wait_nsec: 3e
spi deice id: c2 20 15 c2 20 ()
find flash: mx25l1605d
raspi_read: from: len:1000
Using default environment
##### The CPU freq = 320 MHZ ####
SDRAM bus set to 16 bit
SDRAM size =32 Mbytes
Please choose the operation:
1: Boot system code via Flash (default).
2: Load system code then write to Flash via TFTP.
3: Entr boot command line interface.
reset pressed for 2 seconds
Trying Eth0 (10/100-M)
ETH_STATE_ACTIVE!!
starting httpd server from server 192.168.0.250
WPSのボタンを離すときに3を入力しているとオートブートをキャンセルしてコマンド
インターフェースになるようです。(時々失敗するので何度ややるとうまくいきます)
sh-3.2$ sudo cu -l /dev/cu.usbserial-000011FDB -s 57600
Connected.
U-Boot 1.1.3 (Nov 29 2009 - 20:59:38)
Board: Fonera
relocate_code Pointer at: 81fac000
spi_wait_nsec: 3e
spi deice id: c2 20 15 c2 20 ()
find flash: mx25l1605d
raspi_read: from: len:1000
Using default environment
##### The CPU freq = 320 MHZ ####
SDRAM bus set to 16 bit
SDRAM size =32 Mbytes
Please choose the operation:
1: Boot system code via Flash (default).
2: Load system code then write to Flash via TFTP.
3: Entr boot command line interface.
reset pressed for 2 seconds
You choosed 3
3: System Enter Boot Command Line Interface.
U-Boot 1.1.3 (Nov 29 2009 - 20:59:38)
RT3052 # help
- erase SPI FLASH memory
- alias for 'help'
- boot application image from memory
- memory copy
- start application at address 'addr'
- print online help
- start webserver
- memory display
- memory modify (auto-incrementing)
- memory write (fill)
- memory modify (constant address)
printenv- print environment variables
- Perform RESET of the CPU
- set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
RT3052 # printenv
bootcmd=httpd
bootdelay=2
baudrate=57600
ethaddr="00:AA:BB:CC:DD:10"
ipaddr=10.10.10.200
serverip=10.10.10.3
ramargs=setenv bootargs root=/dev/ram rw
addip=setenv bootargs $(bootargs) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmas
k):$(hostname):$(netdev):off
addmisc=setenv bootargs $(bootargs) console=ttyS0,$(baudrate) ethaddr=$(ethaddr)
flash_self=run rbootm $(kernel_addr) $(ramdisk_addr)
kernel_addr=BFC20000
bootfile=fonita.img
u-boot=u-boot.bin
load=tftp 8A100000 $(u-boot)
u_b=protect off 1:0-1;era 1:0-1;cp.b 8A100000 BC400000 $(filesize)
loadfs=tftp 8A100000 root.cramfs
u_fs=era bc540000 bc83cp.b 8A100000 BC540000 $(filesize)
test_tftp=tftp 8A100000 root.run test_tftp
stdin=serial
stdout=serial
stderr=serial
ethact=Eth0 (10/100-M)
Environment size: 786/4092 bytes
Linux(OpenWRT)がブートしてしまうとシェルは起動していないようでコンソールから
の入力は効かなくなります。
Linuxを起動して表示されるFLASHの構成
0xxuboot64K
0xxboardconfig64K
0xximage1920K
0xx000b6000linux600K
0x000bf0000rootfs1256K
0x001f00000uci_overlay64K
とここまでで、JTAGを使わなくてもOSの焼き直しができそうです。ところでこの
基盤のJTAGらしきパターンの穴はDIPではなく2mmピッチです。シリアルのパターンは
DIPの2.54mmなんですが。。。(後日修正)
カスタムファームを焼こうとを思ったのだが、2は選べるのだが以下のように
Operation terminatedになってあっという間に勝手にブートしてしまう。。。
2: System Load Linux Kernel then write to Flash via TFTP.
Warning!! Erase Linux in Flash then burn new one. Are you sure?(Y/N)
Operation terminated
2キーを押しっぱなしにしていた事でY/Nにも2が入っていた事が原因だった。一回
2を押してリセットを離すとうまくいった。
焼き直したファームにはtelentが出来る。
$ sudo ifconfig rl0 inet 10.10.10.10 alias
$ telnet 10.10.10.254
Trying 10.10.10.254...
Connected to 10.10.10.254.
Escape character is '^]'.
(none) login: admin
BusyBox v1.12.1 ( 19:52:41 EST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
現在手元には2305が二台と2405が二台あるが、2405の一台はACアダプタのコネクタの
サイズが違っている。2305のトルクスネジはT-6だったが2405はT-8でだった。T-6,T-8
も持っていたのだが軸が短く使えず新たに買うはめになった。
というプロジェクトがあるようだ。
作成して放置さているようだが、時間が出来たら試してみたい。
とりあえず手順に従い、同じRalink RT305xが使われているD-LinkのDAP-1350で最小
セットでビルドしてみた。エラーなどなくビルドは出来た。()
ファイル名サイズ
D-Link_DAP-1350.zimage3914752
D-Link_DAP-1350_kernel4625359
D-Link_DAP-1350_kernel.kbin3738204
D-Link_DAP-1350_kernel.kbin.oldlzma1030654
D-Link_DAP-1350_kernel.kbin.oldlzma.uboot1030718
D-Link_DAP-1350_kernel.kbin.oldlzma.uboot.sync1048576
D-Link_DAP-1350_rootfs-
D-Link_DAP-1350_rootfs_clean-
D-Link_DAP-1350_rootfs_clean.iso
D-Link_DAP-1350_rootfs_clean.iso.ulzma2866176
D-Link_DAP-1350_rootfs_clean.mtree11174
zimageが最終イメージのようだが、4Mちかくありまったく入らない。。。oz_
作戦としては以下のような事が考えられる。
kernelの機能を最小限にして、ファイルシステムの内容も最小限としてimageを
小さくする
Flashを大きい物と交換する(U-Bootの焼き込みが必要で面倒)
kernelだけをflashに焼いて、USBメモリにファイルシステムを置く
kernelだけをflashに焼いて、NFSをマウントする
Ralink RT3050F
ESMT M12L2561616A
MX 25L1605M2I
1.1.3 (Nov 29 2009 - 20:59:38)
USB/JTAG/CFIのパターン有り。シリアルのピンヘッダーにホールがあり付けやすい
のでお勧めだが、あまり生産されてなかったのか2405に比べるとHardOffなどで見当たら
2405と同じく上部のロゴがシルバーのプリントバージョンがネットオークションで
確認できるが、手元にある2305は凹加工で未確認。
Ralink RT3050F
ESMT M12L2561616A
MX 25L1606E (8pin)
1.1.3 (Jan
6 2010 - 07:10:30)
Flashは裏側に実装されるようになっていて16ピンの
パターンもある。8ピンのSPIのメモリは64MbitがDigiKeyの標準在庫で128Mbitからは
16ピンの方が標準在庫となっているようなので、大きいFlashを載せ変えたいので
あればこちらがいいかもしれない。基本的には2305のコストダウン版なのだが左端の
LEDが二色に変更されている。
Ralink RT3050F
ESMT M12L2561616A
MX 25L1605DMI-12G (16pin)
ACアダプタコネクタサイズで区別がつくかとおもったがそうでもないようだ。
とりあえずカーネルだけ試すには以下のコマンドをU-Bootで実行。
tftpboot 0x
zrouter/boards/D-Link/DAP-1350/board.mkを修正してkernelからUSBのサポート外して、
zrouter/profiles/xSMALL_/profile.mkにファイルシステムに放り込むバイナリの一覧
があるので、いったん全部外して、ビルドしてみたところzimageが1.5M位になったので
flashに焼いてブートしてみたが、rootfsがマウントできず落ちる。
U-Boot 1.1.3 (Nov 29 2009 - 20:59:38)
Board: Fonera
relocate_code Pointer at: 81fac000
spi_wait_nsec: 3e
spi deice id: c2 20 15 c2 20 ()
find flash: mx25l1605d
raspi_read: from: len:1000
Using default environment
##### The CPU freq = 320 MHZ ####
SDRAM bus set to 16 bit
SDRAM size =32 Mbytes
Please choose the operation:
1: Boot system code via Flash (default).
2: Load system code then write to Flash via TFTP.
3: Entr boot command line interface.
booting from flash
## Booting image at bf020000 ...
raspi_read: from:20000 len:40
Image Name:
FreeBSD Kernel Image
13:00:29 UTC
Image Type:
MIPS Linux Kernel Image (lzma compressed)
Data Size:
974350 Bytes = 951.5 kB
Load Address:
Entry Point:
raspi_read: from:20040 len:ede0e
1Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
## Transferring control to Linux (at address ) ...
## Giving linux memsize in MB, 32
Starting kernel ...
RT3350 runing with 320MHz clock
System bus clock - 106MHz
System start from NOR flash storage
U-Boot args (from 0 args):
Environment:
entry: mips_init()
Cache info:
picache_stride
picache_loopcount = 8
pdcache_stride
pdcache_loopcount = 4
cpu0: MIPS Technologies processor v76.150
MMU: Standard TLB, 32 entries
L1 i-cache: 4 ways of 256 sets, 32 bytes per line
L1 d-cache: 4 ways of 128 sets, 32 bytes per line
Config1=0xbea3319e&PerfCount,WatchRegs,MIPS16,EJTAG&
Config3=0x420
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c)
The FreeBSD Project.
Copyright (c) , , , ,
The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 10.0-CURRENT #0: Wed Jul 30 21:59:51 JST 2014
hiroki@microserver:/usr/home/hiroki/ZRouter/obj/usr/home/hiroki/ZRouter/zrou
ter/tmp/mips.mipsel/usr/home/hiroki/ZRouter/FreeBSD/head/sys/usr/home/hiroki/ZRo
uter/obj/usr/home/hiroki/ZRouter/zrouter/conf/D-Link_DAP-1350 mips
real memory
= 768K bytes)
avail memory = MB)
rand using insecure entropy
nexus0: &MIPS32 root nexus&
clock0: &Generic MIPS32 ticker& on nexus0
Timecounter &MIPS32& frequency
Hz quality 800
Event timer &MIPS32& frequency
Hz quality 800
obio0 at mem 0xx1fffffff on nexus0
rt305x_sysctl0: &RT305X System Control driver& at mem 0xx100000ff irq
0 on obio0
rt305x_sysctl0: Use gpiomode=0x00029d
Chip ID: &RT3350
SYSCTL_SYSCFG=0x8830000
GE0 mode 0
Boot from 3
Bootstrap test code 0
SRAM_CS mode 0
8mA SDRAM_CLK driving
SYSCTL_CLKCFG0=0x
SDRAM_CLK_SKEW 1ns
SYSCTL_CLKCFG1=0x04283c
USB OTG clock is enabled
I2S clock is internal 15.625MHz
I2S clock divider 40
PCM clock is internal 15.625MHz
PCM clock divider 60
SYSCTL_GPIOMODE=0x00029d
rt305x_ic0: &RT305X Interrupt Controller driver& at mem 0xx100002ff on
uart1: &rt305x_uart& at mem 0xx10000cff irq 12 on obio0
uart1: console (115200,n,8,1)
cfi_do_query: query at 0 with mask 0xff (w=1, s=2)
cfi_do_query: cfi_read(sc, ofs, CFI_QRY_IDENT) return 0xe0
cfi_do_query: query at 0 with mask 0xff (w=1, s=1)
cfi_do_query: cfi_read(sc, ofs, CFI_QRY_IDENT) return 0
switch0: &ethernet switch bus& at mem 0xx10117fff irq 17 on obio0
rt305x_switch0: &RT305XF internal ethernet switch& on switch0
set_vlan_ports: idx=0, memb=0000007f
rt0: &Ralink RT305XF onChip Ethernet MAC& at mem 0xx1010ffff irq 3 on
rt0: RT305XF Ethernet MAC
rt0: use hardcoded 00:18:e7:d5:83:90 macaddr
rt0: Ethernet address: 00:18:e7:d5:83:90
rt305x_switch_port_state_change: Link status:
Timecounters tick every 10.000 msec
Trying to mount root from cd9660:/dev/map/rootfs.uncompress []...
mountroot: waiting for device /dev/map/rootfs.uncompress ...
Mounting from cd9660:/dev/map/rootfs.uncompress failed with error 19.
Loader variables:
Manual root filesystem specification:
&fstype&:&device& [options]
Mount &device& using filesystem &fstype&
and with the specified (optional) option list.
eg. ufs:/dev/da0s1a
cd9660:/dev/acd0 ro
(which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /)
List valid disk boot devices
Yield 1 second (for background tasks)
&empty line&
Abort manual input
mountroot&
いったんビルドしないとkernelとrootfsのサイズが確定されず、この値をhintsに書いて
もう一度ビルドして、zimageを作るのが手順なのかな。
フラッシュのrootfsがマウントできない。。。RT305xFのspiは2014/8現在作りかけの
様でrt305x_spi.cはzrouterのソースツリーにしかなく、obio.cのなかでspiはnotyet
でコメントアウトされている。これを有効にすると下記のように落ちる。
obio0 at mem 0xx1fffffff on nexus0
Can't add child spi0 ordered
Trap cause = 2 (TLB miss (load or instr. fetch) - kernel mode)
[ thread pid 0 tid 100000 ]
Stopped at
device_get_parent:
Tracing pid 0 tid 100000 td 0x
802b8d1c+c (?,?,?,?) ra 803bc848 sp 005c sz 0
80006f8c+a8 (186a0,?,,?) ra 2 sp 02a8 sz 1
VOP_LOOKUP_AP+ebcd8 (?,?,?,?) ra 803bc868 sp 80327cbb sz 0
rtのサポートコードと、sys/dev/spibus,sys/dev/flashのソースでサポートできるの
ではないかと思われる。KOBJという仕組みで、コンフィグレーションをおこなうよう
だが、sys/mips/rt305x/spibus_if.mはsys/dev/spibus/の下のファイルと同じなので
本来はsys/dev/spibusの方を使うべきだろう。KOBJは*mからmakeobjops.awkで*.c,*.h
を生成して使うようだ。(後日追記:おそらく確認用にコピーしただけでrt305xの下の
spibus_if.mは必要なかった)
obio.cで追加されている、デバイス一覧
rt305x_sysctl○sys/mips/rt305x/rt305x_sysctl.c
rt305x_ic○sys/mips/rt305x/rt305x_ic.c
rt305x_memc
uart○sys/mips/rt305x/uart_*c
gpio○sys/mips/rt305x/rt305x_gpio.c
rt305x_dma
rt305x_nandc
uart○sys/mips/rt305x/uart_*c
cfi○sys/dev/cfi/cfi_bus_obio.c
dotg○sys/mips/rt305x/rt305x_dotg.c
rt5350_usb○sys/mips/rt305x/rt5350_usb.c
spiは以下のような構成でサポートされる物と思われる。
BUS_ADD_CHILDするとカーネル内のDRIVER_MODULEで定義されたデバイスコードで
第三引数のdriver_t構造体の第一メンバーが該当するドライバーを捜し出して、
第二メンバーのメソッドを呼び出すという処理の流れだと思われる。
なぜspiはうまくいかないんだろう。。
通常のドライバは設定済みのpciなどのバスにぶらさがるので、BUS_ADD_CHILD
することはないが、obioは直接メモリに見えていて、それを処理するドライバコードを
ロードする為にBUS_ADD_CHILDしていると思われる。
obio_add_res_childで存在しないデバイスを追加しようとすると、なにも起きないが
spiを追加しようとすると落ちるのは、なんらか不備があるから何だと思われる。
atherosの方の実装はnexusに直接spiがぶらさがっているが、rt305xの方はobioを挟む
ような実装になっている。
BUS_DEBUGを設定してカーネルをビルドして起動して吐かせた
bootverboseを設定して起動したいが、loader.confはファイルシステムが読めてから
有効になるため、とりあえずkern/init_main.cのデフォルト値を1に変更してビルドし
てみたがダメだったので、とりあえずソースを直接いじった。
上のログを見るとわかるがboards/D-Link/DAP-1350/board.hintsにspiの設定があり
それが先に処理されてobioで追加しようとすると既に追加されてエラーになっていた。
hintsから消したら、落ちなくなったが認識もされてない。
RalinkにはRT3050,RT3052,RT5350というチップがあってRT305xは2008年にRT5350
は2010年位から製造されているようだ。2011年にMediaTek買収されているので、RT5350が
Ralinkとしては最後の製品かもしれない。
国内ではFlashの販売が見つからなかったので、DigikeyでMX25L6406Eを購入して付け
替えてみた。元の25L1605を読みより、ddで空の6Mのファイルを作りcatで連結して
25L6406に焼いてみた。RalinkのSDKに入っているU-Bootのコードを見ると、25L128まで
サポートされている可能性が高いが、25L128はパッケージが8ピンの物はDigikey在庫が
なく、在庫があるのは16ピンになるので外すのが面倒なので8ピンの25L6406にしてみた。
U-BootでImageは焼けるので、直づけで取り替えても良かったが、万が一U-Bootを飛ば
した時にリカバリが楽なように開発用の一台だけソケットでFlashを付けてみた。
ヤフオクで入手した、SOPからDIPの変換キットにソケットをかまして使ってみた。
ピン間が2.54mmなので一列の1.27mmのソケットが使えたのだが、抜くとソケットのガワ
が外れてしまう。。。
チップを外す為にSperkfunの表面実装部品用取り外しキットを使ってみた。8ピンなので
頑張れば、ハンダゴテだけでも外せるのかもだが、パターンをいためるともともこうも
なくなるで、買ってみた。サンハヤトにも同様のキットがあって、値段が倍近くしたの
でSperkfunのにしてみた。
Flashを付けた基板は、秋月のSOP 8ピンの変換基板だがMXのFlashはチップ自体の幅が
5.28mmと広くぎりぎりパターンにのって、足の下でハンダ付けされているような状態。
のページに書いたが、Flashは
オープンソースを使ってFT2232Hで焼いてみた。
ネットを検索していたらSPI FlashチップのIDがU-Boot内に無くても使えるみたいだ。
Flashのアップデート時は以下のような状態になっていると思う。kldで用意するのが
良いのかもだがさすがにこれを作り込むのはかなり先になると思う。
読み出したFlashのU-Boot部分の内容はhexdumpで見ると以下のようになっていた。
05 19 56 9f 10 6c a9 4b 12 d2 b7 00 00 ed fe
10 00 00 80 10 00 00 c8 8a 38 8b 05 05 01 00
19 10 80 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d 00 00 80 00 ff ff ff ff ff ff ff ff 00 7f 80
c 20 00 ca f2 a5 f4 09 42 10 c8 20 03 c1 a0 14
000ee30 97 79 17 2f e4 cb 8c ae 2e ff dd ed 12 d6 00 00
000ee40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 00 01 00 18 84 aa 18 7c ff ff ff ff ff ff
0010010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0010020 ff ff ff ff ff ff ff ff 00 18 84 aa 18 7e 00 0c
30 50 66 11 05 24 00 ff ff 2b 01 55 77 a8 aa
c 88 ff ff 0c 00 00 00 00 00 00 00 00 00 ff ff
80 02 03 03 04 04 05 05 06 06 07 07 08 08 09
10 11 11 11 12 12 12 13 13 13 14 14 14 ff ff
0010070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00100d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff 88 88
00100e0 cc cc 88 aa cc cc 88 aa cc cc 88 aa cc cc 88 aa
00100f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
4f 4e 32 33 30 35 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 61 72 6f 61
18 84 aa 18 7d be 4e e1 e5 e9 ca f3 79 b0 ed
a e9 5c f6 c6 29 73 6c 63 a3 06 63 56 9d d9 56
c3 ba 70 b9 6d 70 31 53 69 57 53 57 39 4a 48
00 31 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
05 19 56 34 e7 e8 5c 54 44 43 b1 00 14 3a 38
00 10 00 80 00 10 00 72 4f e4 ea 05 05 02 01
FON2305EのBOOTの設定はboot from internal ROMとなっているのだが、この仕様が
よくわからない。また吸い取った先頭64KがU-Bootなのだが文字列が見当たらないので
圧縮されているのだがと思うが、これもよくわからない。あと次の64K部分はU-Bootの
設定が入っているようなのだが、この構造もよくわからない。
とはいえ、動いているから時間が出来たら調べようと思う。
起動時に"Using default environment"と表示されているので、おそらく
CFG_ENV_IS_NOWHEREがdefineされU-Bootがビルドされていて、Flash内にはuser config
は無くてコード内のデフォルト値が使われている模様。setenvはメモリ内に設定値を
保存して、Flashには書き込めないようだ。
以下がROMのブートローダーなのかも。
RT3052 # md
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff ffffffff ffffffff ffffffff
................
: ffffffff 16b20 2072656b
........ kaiker
: 4e 67616d69
rt3052 INIC imag
e boot loader...
: 00000 ffff148f
.......@........
: 060a0 90209
.........@......
: 40950 ffffff
....P...........
ZRouterをいじっていて、どうにか動くようになった。起動ログは
感じ。イメージはxSMALL_でビルドして4MByte
弱となっていてノーマルのFONには入らない。いじった点は以下のようなところ。
FreeBSD/head/sys/mips/rt305x/rt305x_spi.cのrt305x_spi_methodsに以下を追加
DEVMETHOD(spibus_get_block,
rt305x_spi_get_block),
rt305x_spi_get_blockの処理をar71xx_spi.cからコピー
makeobjops.awkを使ってspibus_if.mから.cと.hを作成
files.rt305xに以下を追加
mips/rt305x/rt305x_spi.c
optional spi rt305x_spi
socs/Ralink/RT3050F/soc.mkに以下を追加。
KERNCONF_DEVICES+=
KERNCONF_DEVICES+=
KERNCONF_DEVICES+=
rt305x_spi
KERNCONF_DEVICES+=
boards/D-Link/DAP-1350をboards/FON/FON2305Eにコピー
board.mkのSOC_CHIPをRT3052FからRT3050Fに変更
board.hintsに以下を追加
hint.spi.0.at=&obio0&
hint.spi.0.maddr=0x10000B00
hint.spi.0.msize=0x
hint.spi.0.irq=-1
hint.mx25l.0.at=&spibus0&
hint.mx25l.0.cs=0
board.hintsのmapのatをflash/spi0に変更
一度ビルドして出来たイメージのディレクトリで以下のスクリプトでstart,endを
計算してhintsを修正して、再ビルド
UBOOTEND=131072
KERNSIZE=`ls -l *.sync | awk '{print $5}'`
FSSIZE=`ls -l *.ulzma | awk '{print $5}'`
KERNEND=`expr ${UBOOTEND} + ${KERNSIZE}`
FSEND=`expr ${KERNEND} + ${FSSIZE}`
printf &%08x\n& ${UBOOTEND}
printf &%08x\n& ${KERNEND}
printf &%08x\n& ${FSEND}
gpiobuttonはhintsには入っているがコンフィグレーションされてなくて、追加
してみたがコンパイルでエラーが出るのでとりあえず断念
ZRouterではmapの中で#!/bin/shで始まるブロック(*.ulzma)をg_uncompress.cで解凍し
てメモリディスクとしてrootファイルシステムとしてマウントする。map/rootfsが解凍
されてmap/rootfs.uncompressになる。hintsのmapでrootfsのstartがずれていると解凍
されず、map/rootfs.uncompressが出来ずマウントできずに落ちるのだが、
g_uncompress.cはデバッグログを吐かせないと、エラーに気がつけないのはちょっと
不親切かもしれない。
ZRouteはAtherosのAR71が充実していて、Ralinkが次に充実していて、
Broadcomは申し訳程度のサポートしか無いようだ。
soc.mkで指定されているmipselはmipsでlittle endianな仕様の事のようだ。
newbusの仕組みは元々の4BSDの仕組みで無かった、ダイナミックなドライバーの
ロードをサポートした点であるようなのだが、それはkldで実装された部分がほとんど
で実際はドライバーコードは4.3BSD頃からあまり変わっていない感じも受ける。
Appleのkextみたいに完全に新しく作ったぜ、みたいな感じは全くない。newconfig
と喧々諤々やたため、あまり成果が出せなかったのかな。というよりいろんな人の
意見をまとめなければならないオープンソースコミュニティーの宿命なのかもしれ
ない。と書いたが船頭多くしてなんとかは一般企業でも同じかもしれない。
考え直してみるとnewbusとnewconfigの話だが、本質的にはELF,kld移行でカーネル屋
さんが忙しく英語の得意ではない日本勢のnewconfigの話を聞いている時間がなくなり、
話が伝わりやすいnewbus勢に傾いたのかもしれないと思ったりする。
lvanのポートのmacアドレスをkenvで設定するようにrcファイルに書いてあるのだが、
kenvの中身は、どうやって設定するのだろうか?
いろいろ調べていて、U-BootについてKMCさんの
ZRouterのビルドは以下の順で実行されている。
&&& Rebuilding the temporary build tree
&&& stage 1.1: legacy release compatibility shims
&&& stage 1.2: bootstrap tools
&&& stage 2.2: rebuilding the object tree
&&& stage 2.3: build tools
&&& stage 3: cross tools
&&& stage 4.1: building includes
&&& stage 4.2: building libraries
&&& Rebuilding the temporary build tree
&&& stage 1.1: legacy release compatibility shims
&&& stage 1.2: bootstrap tools
&&& stage 2.2: rebuilding the object tree
&&& stage 2.3: build tools
&&& stage 3: cross tools
&&& Building an up-to-date make(1)
&&& World build started on Wed Dec 31 20:19:10 JST 2014
&&& stage 2.2: rebuilding the object tree
&&& stage 2.3: build tools
&&& stage 4.1: building includes
&&& stage 4.2: building libraries
&&& stage 4.3: make dependencies
&&& stage 4.4: building everything
&&& World build completed on Wed Dec 31 20:21:00 JST 2014
&&& Making hierarchy
&&& Installing everything
&&& Kernel build for /usr/home/hiroki/ZRouter/obj//usr/home/hiroki/ZRouter/zrout
er/conf/FON_FON2305E started on Wed Dec 31 20:21:07 JST 2014
&&& stage 1: configuring the kernel
&&& stage 2.2: rebuilding the object tree
&&& stage 2.3: build tools
&&& stage 3.1: making dependencies
&&& stage 3.2: building everything
&&& Kernel build for /usr/home/hiroki/ZRouter/obj//usr/home/hiroki/ZRouter/zrout
er/conf/FON_FON2305E completed on Wed Dec 31 20:24:25 JST 2014
&&& Installing kernel /usr/home/hiroki/ZRouter/obj//usr/home/hiroki/ZRouter/zrou
ter/conf/FON_FON2305E
scosのRT3050にはrt2860が入っていたが、RT3052はralであった。rt2860がコンパイル
できなかったのでralに代えて確認してみた。
ral0はprobeされifconfigで見えるが以下のようにエラーになる。
# ifconfig wlan0 create wlandev ral0
# ifconfig wlan0 up scan
ral0: timeout waiting for MCU to initialize
ral0: could not load 8051 microcode
rt2860.cのrt2860_load_microcode()でマイクロコードを書いた後に8051をスタートさ
せたにも関わらずレスポンスが無いようだ。。。
上のダンプを見ると、おそらく本体の下に書いてあるMACアドレスと連続した二つ
の計三つが割り当てられていて末尾が7Cの場合7D,7Eが割当られていると思われる。
フラッシュの付いた基板の生産はどういう手順なのかまったくわからないのだが
フラッシュによくペインとしてあるので、バージョン管理をペイントでおこない
焼いた物を実装しているものと思われる。実装してから、JTAGで焼く事も出来るが
時間がかかるので、生産ラインとしては非現実的なような気がする。ただ上記のよう
に、筐体のシールとフラッシュの中身を一致させる必要があるので、生産ラインの
コントロールはかなり慎重におこなわれているのかもしれない。
パッケージにはRT3050とあるがCHIPID0_3/CHIPID4_7を読むとRT3350と返ってくるし
RT2860が入ってるのかと思いきや、ASIC_VER_IDは0xと返ってきて、手元の
データーシートと違っている。。。
RT288x_SDK/source/linux-2.6.21.x/drivers/net/wireless/rt2860v2/include/firmware.h
がオリジナルのファームのようだ。SDKの中には元のbinファイルは見つからない。
FreeBSDの方はsys/contrib/dev/ralの下にRalinkから提供されたファームがuuencode
されて入っている。
Ralinkのチップはプロダクト番号が不規則に指定されていて、番号だけでは何のチップ
かわからない。は同じWIFIのチップなのだが前者が作り込みで
後者が8051を使ったホストからファームをダウンロードするタイプで全く違うものに
なっている。は同じ系統でbとb/gの機能差だったりするからなにがなんだか
わからない。
rt2860.cの中にはRT2860とRT3593とRT3071以上の処理が入っている。
RT3050のWIFIは以下のような構成のようだ。
RT2860はPCIにもつながりその場合はMedia Access Controller / Baseband Processor
のチップににEEPROMがつながっていて、それにMACアドレスなどが書かれている。
RT3050などのSOCの場合はEEPROMは無いので、SDKではFlashにそれと同等のデータを
書き込んでおいて、利用しているようだ。デフォルトの値はカーネルの中にも
入っているようだ。
ZRouterのFreeBSDのソースツリーにはrt2860というドライバーコードもはいっていて、
これも試してみた。conf/files.mipsにフォルダーのpci以外のcソースを突っ込んで
rt2860.cの構造体のメンバーのtxa_acをtxa_tidに変更したら、コンパイルが通った。
txa_tidで書かれている部分もあるのになんで、こんな半端な状態なんだろう。。。
あと、rt2860_io.cのEEPROMイメージがRT3052だけだったのでRT3050も追加してみた。
ifconfigしてもエラーが出なくなったので、hostapを入れてビルドして、サイズを確認
してmapを直して、もう一度ビルドして試したら、こんな感じ。この時点で4MByte越え
になってしまってます。
# ifconfig wlan0 create wlandev rt28600 wlanmode hostap channel 1 country JP
wlan0: Ethernet address: 00:0c:43:30:52:88
# ifconfig wlan0 inet 192.168.1.1 netmask 255.255.255.0
# /usr/sbin/hostapd
Shared object "libpcap.so.8" not found, required by "hostapd"
profiles/hostap/profile.mkにWORLD_SUBDIRS_LIB+=libpcapを追加してビルドして
map直して、ビルドしてhostapdを実行
# /usr/sbin/hostapd /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
Using interface wlan0 with hwaddr 00:0c:43:30:52:88 and ssid 'freebsdap'
ieee80211_load_module: load the wlan_xauth module by hand for now.
ioctl[SIOCS80211, op=7, val=5, arg_len=0]: Invalid argument
bsd_set_ieee8021x: Failed to enable WPA/802.1X
IEEE 802.1X initialization failed.
wlan0: Unable to setup interface.
rmdir[ctrl_interface]: No such file or directory
# kldload wlan_xauth
# kldload wlan_tkip
# /usr/sbin/hostapd /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
Using interface wlan0 with hwaddr 00:0c:43:30:52:88 and ssid 'freebsdap'
hostapとしては機能しているようには見えないが、scanするとときどきアクセス
ポイントが見えているので微妙に動いている模様。ralのnexus直下のコードもZRouter
オリジナルのようだが、ralが動かないのでrt2860の方に移行したのかな。。。
rt2860の方も元々はPCIのコードでnexus直下のコードはZRouter追加したのではないかと
思われる。
しかしrt2860は実際のデバイス名がrt28600となり何とも気持ちが悪い。
UNIXでデバイス名には数字を使わない事って、どっかに書いてあるのかな?
RalinkはUSBのWIFIモジュールも作っていてFreeBSDではuralが2500でrumが2501で
runが2700などのドライバが用意されている。コードはsys/dev/usb/wlanの下にある。
runは8051を使ったタイプでrunfwにRalinkから提供されたファームが入っている。
runfwはralfwと違いfirmwareのドライバを使わずドライバ内にコードが入れている。
run0: MAC/BBP RT3070 (rev 0x0201), RF RT3020 (MIMO 1T1R), address 00:00:00:00:00:00
ハードコードしてブート時にデバッグ吐かせてみた。ブート後はsysctlでdev.rt2860.0.debug
を設定する事でログ出ます。
rt28600: &Ralink RTn MAC/BPP& at mem 0xx101bffff irq 4 on n
rt28600: attaching
rt28600: EEPROM rev=0x0101
rt28600: EEPROM mac address=00:0c:43:30:52:88
rt28600: EEPROM RF rev=0x0005, paths=1T1R
rt28600: EEPROM NIC config: HW radio cntl=0, Tx AGC cntl=0, ext LNA gains=0/0
rt28600: EEPROM country code=255/255
rt28600: EEPROM freq offset=0x2f
rt28600: EEPROM LED cntl=0x01, LEDs=0x7755/0xaaa8/0x888c
rt28600: invalid EEPROM LNA gain #2: 0x00
rt28600: invalid EEPROM LNA gain #3: 0x00
rt28600: EEPROM LNA gains=0x00/0x00/0x00/0x00
rt28600: EEPROM RSSI offsets 2GHz=0/0/0
rt28600: EEPROM RSSI offsets 5GHz=0/0/0
rt28600: EEPROM Tx power per rate deltas=0(2MHz), 0(5MHz)
rt28600: EEPROM Tx power per rate #0=0xaacc6666(20MHz), 0xaacc6666(40MHz/2GHz),
0xaacc6666(40MHz/5GHz)
rt28600: EEPROM Tx power per rate #1=0xaacc6688(20MHz), 0xaacc6688(40MHz/2GHz),
0xaacc6688(40MHz/5GHz)
rt28600: EEPROM Tx power per rate #2=0xaacc6688(20MHz), 0xaacc6688(40MHz/2GHz),
0xaacc6688(40MHz/5GHz)
rt28600: EEPROM Tx power per rate #3=0xaacc6688(20MHz), 0xaacc6688(40MHz/2GHz),
0xaacc6688(40MHz/5GHz)
rt28600: EEPROM Tx power per rate #4=0xffff6688(20MHz), 0xffff6688(40MHz/2GHz),
0xffff6688(40MHz/5GHz)
rt28600: EEPROM TSSI 2GHz: 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
rt28600: EEPROM TSSI 5GHz: 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
rt28600: invalid EEPROM powersave level
rt28600: EEPROM powersave level=0xff
rt28600: MAC/BBP RT2860 (rev 0x), RF RTG 1T1R
rt28600: skip channel 10, could not find extension channel
rt28600: skip channel 11, could not find extension channel
rt28600: skip channel 12, could not find extension channel
rt28600: skip channel 13, could not find extension channel
rt28600: skip channel 14, could not find extension channel
3020は5Gはサポートしてないのだが、5Gの処理が動いているのが気になるが、特に
影響なさそうなんだが。
ZRouterのrt2860のコードにはRT3052のEEPROMイメージが含まれているので、おそらく
RT3052では動いていたのではないかと思われる。またで処理を分けている部分
はRT3052用に追加したのではないのだろうか。RT3050とRT3052の違いはRFがRTR)
かRTR)になる。
rt2860_rf.cの一番下に付いている、rt2872_rf_set_chan()は
おそらくRT3050用に追加したのではないかな。。。common/cmm_asic.cとrt2860_rf.c
を見比べるしかないかな。
rt2860のコードの中でrt2860_io_rf_writeしているのは、rt2860.cとrt2860_rf.cと
rt2860_io.cにある。
rt2860_io.cの中のEEPROMイメージが3052だった物を3050のタイプに書き換えたのだが
rt2860.cの中に3052で判断してRFを初期化していて、ここを直したら動くようになった
気がする。他にもrt2860_rf.cのチャンネル設定をSDKに入っているコードと同じように
readしてから設定値をwriteするようにしたが、必要なかったかも。
wlan関係のモジュールをすべて入れても元から入っているhostapd.confではエラーに
なったので
のページを参考にした。
同じRT3050Fを搭載してCFIなPLANEXのMZK-WNHをブートしたところ。U-Bootはかなり
いろいろな機能を入れてあり、またCFIからの直接のブートの為192Kbとなっている。
============================================
Ralink UBoot Version: 3.1
--------------------------------------------
ASIC 3052_MP1 (MAC to GigaMAC Mode)
DRAM COMPONENT: 256Mbits
DRAM BUS: 16BIT
Total memory: 32 MBytes
Flash: 4 MBytes
Time:13:35:55
============================================
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384
##### The CPU freq = 320 MHZ ####
SDRAM bus set to 16 bit
SDRAM size =16 Mbytes
Please choose the operation:
0: Load ucos code to SDRAM via TFTP Client.
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
9: Load Boot Loader code then write to Flash via TFTP.
3: System Boot system code via Flash.
## Booting image at bfc50000 ...
Bad Magic Number,
Image Name:
Linux Kernel Image
2:36:57 UTC
System Control Status = 0x
Image Type:
MIPS Linux Kernel Image (lzma compressed)
Data Size:
2863020 Bytes =
Load Address:
Entry Point:
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
2/27にIIJで行われたFreeBSD WorkshopのLTで話してきてみた。
iPhone 3Gからは無線からインターネットにアクセスできるようになったが、Androidは
WIFI接続してIPを拾った直後に切断され、iPhone 6はWIFIの接続ができない。dhcpdと
hostapdの設定の問題な気がする。
ただブラウザでネットのページを見ていると以下のようなエラーがときどきでる。
かなりきわどいエラーにも見えるが、カーネルが落ちたりはしていない。^ ^;
rt28600: could not load mbuf DMA map: ndmasegs=0, len=1524, error=12
連休で時間があったので、いろいろ設定していたところ、
というKLabさんの方が
つくったネットワークアナライザがBSDでもコンパイルできるようになっていたので、
さっそくZRouterのビルドツリーに放り込んでみた。ソースをcontribにコピーして
profiles/miruo/profile.mk,target/sbin/miruo/Makefileを作ってちょっといじったら
1間くらいで放り込めた。httpのリクエストの挙動はは下記のようにすると確認できる。
# miruo -q -m http --live -i wlan0 | egrep 'RequestLine.*GET|Header.*Host|ResponseLine.*HTTP/1.1'
hostapdがうまく動かなかったので、FreeBSD 10.1Rのソースにはhostapd 2.0が含まれて
いたのでcontrib/wpaとusr.sbin/wpaを持ってきてみた。ZRouterのビルドはエラー無く
できたが問題は改善せず。。。Androidから接続したときのログはこんな感じ。
05-06 18:25:07.395: V/WifiStateTracker(96): Changing supplicant state: FOUR_WA
Y_HANDSHAKE ==& FOUR_WAY_HANDSHAKE
05-06 18:25:08.405: I/wpa_supplicant(8968): WPA: 4-Way Handshake failed - pre-
shared key may be incorrect
05-06 18:25:08.405: I/wpa_supplicant(8968): CTRL-EVENT-DISCONNECTED - Disconne
ct event - remove keys
05-06 18:25:08.405: V/WifiMonitor(96): Event [WPA: 4-Way Handshake failed - pr
e-shared key may be incorrect]
05-06 18:25:08.405: V/WifiMonitor(96): Event [CTRL-EVENT-DISCONNECTED - Discon
nect event - remove keys]
05-06 18:25:08.405: V/WifiStateTracker(96): New network state is DISCONNECTED
05-06 18:25:08.415: I/wpa_supplicant(8968): CTRL-EVENT-STATE-CHANGE id=9 state
=0 BSSID=00:00:00:00:00:00
05-06 18:25:08.415: V/WifiMonitor(96): Event [CTRL-EVENT-STATE-CHANGE id=9 sta
te=0 BSSID=00:00:00:00:00:00]
05-06 18:25:08.415: V/WifiStateTracker(96): Changing supplicant state: FOUR_WA
Y_HANDSHAKE ==& DISCONNECTED
05-06 18:25:08.415: D/WifiStateTracker(96): Failed to authenticate, disabling
05-06 18:25:08.415: I/wpa_supplicant(8968): CTRL-EVENT-STATE-CHANGE id=9 state
=0 BSSID=00:00:00:00:00:00
05-06 18:25:08.425: V/WifiMonitor(96): Event [CTRL-EVENT-STATE-CHANGE id=9 sta
te=0 BSSID=00:00:00:00:00:00]
05-06 18:25:08.425: V/WifiStateTracker(96): Disabled network: 9
hostapdのログを見ると4-Way HandshakeでSTAから返ってくる、EAPOLのレスポンスが
一致せず4回リトライしてエラーになってしまっているようだ。この処理に関しては
が参考になった。
FreeBSDのソースのheadにはhostapd 2.4が入っていたので、svnで取り出してちょっと
いじってビルドできるようにしてみたが、同じ結果だった。
Android 2.3×
WPAの4-Way Handshakeに失敗してるパスワードの間違いだったが、やっぱり
接続切断を繰り返す。パスワードの間違いがあっても表示されない仕様って良くない
iOS 4.2.1(JB)○
EAPOLのGroup Messageも成功して接続完了した後にDHCPの処理を行った後に切れる
MacOS X 10.6.8×
iOS 8.2と同じような感じ
Windows 7○
インターネットの接続の認識に時間がかかるが使える
FreeBSD 9○
wpa_supplicantでは問題なく接続できるdhcpは未確認
dhcpdからdnsmasqに代えてみたが、状況変わらず。。oz_
昔を調べたのだが、WIFIが複雑で
動かない事が良くある事があらためて身にしみる。。。
hostapdはSTAからの切断時にioctl[SIOCS80211, ...のようなログが出るがこれはbsdの
ドライバコードが吐いていて動作には影響ないエラーのようだ。
socsSOCに由来の設定を保存するところ
boardsボードに由来の設定を保存するところ
profiles/*_既存のプロファイルをコピーして、ここにビルドの目的
の設定を保存するのが良いよな気がする。
Macのから接続すると以下のようなログがでている。
May 17 09:21:20 hiroki-no-macbook-air kernel[0]: AirPort: RSN handshake complete
May 17 09:21:27 hiroki-no-macbook-air kernel[0]: en0: Terminating supplicant.
May 17 09:21:27 hiroki-no-macbook-air kernel[0]: RSNSupplicant: Releasing authen
ticator for 00:0c:43:30:52:88
May 17 09:21:27 hiroki-no-macbook-air kernel[0]: AirPort: Link Down on en0. Reas
on 8 (Disassociated because station leaving).
May 17 09:21:27 hiroki-no-macbook-air airportd[254]: Apple80211Associate() faile
d -3905 (Timeout)
May 17 09:21:27 hiroki-no-macbook-air Apple80211 framework[144]: airportd MIG fa
iled (Associate Event) = -3905 (Timeout)
(port = 69123)
May 17 09:21:27 hiroki-no-macbook-air SystemUIServer[144]: Error joining freebsd
ap: 接続がタイムアウトになりました (-3905 timeout connecting)
Copyright (C) 2011 Hiroki Mori All Rights Reserved.

我要回帖

更多关于 密引脚贴片如何贴 的文章

 

随机推荐