ラベル LEDE の投稿を表示しています。 すべての投稿を表示
ラベル LEDE の投稿を表示しています。 すべての投稿を表示

2019年6月18日火曜日

IPoE導入

IIJからIPoE月額オプション無料の連絡が来た。
https://www.iijmio.jp/imh/ipoe/
2020/6/30までらしい。
最近、ビデオ電話とかYoutubeにお世話になる機会が多くなったことと
夜間帯のスピードが遅いように思えてきたので、IPoE導入してみようと思う。
IIJmioひかりで提供してくれるのはDS-Liteというもの。
http://techlog.iij.ad.jp/archives/1254

現状

スピードテスト
サイト 機器 下り 上り レイテンシ
Google PC Giga有線LAN 229.6Mbps 290.4Mbps 3ms
Google スマホ1 無線LAN 2.4G 11n 9.78Mbps 23.6Mbps 5ms
Google スマホ2 無線LAN 2.4G 11n 42.3Mbps 54.5Mbps 4ms
Google PC 無線LAN 5G 11n 95.7Mbps 11.4Mbps 5ms
fast.com PC 有線LAN 220Mbps 280Mbps 3ms
fast.com スマホ1 無線LAN 2.4G 11n 26Mbps 28Mbps 8ms
fast.com スマホ2 無線LAN 2.4G 11n 68Mbps 200Mbps 4ms
fast.com PC 無線LAN 5G 11n 150Mbps 87Mbps 5ms
2019/06/02 21時ごろ
あれ、、、遅いのはスマホ1のせい?
どうしよう、ギガビットHUBとか買っちゃったよ。
よく調べてからやろうと思ったのに、つい先走ってしまった。。。

構成

現状の構成は以下の通り

自宅サーバーのためにポートフォファードしている。
DS-Lite使うとこれができなくなってしまうらしい。

いざIPoEオプション加入へ

https://www.iijmio.jp/imh/ipoe/
から申し込みを行う。設定完了までに最大3日かかるみたい。
すぐじゃなかったー。よく読んでおけばよかった。

新しい構成を考える

高性能なルーターでPPPoEとDS-Liteを同居ささる方法がシンプルだけど、そんなに設備投資できない。
今ある環境を利用しつつだと2つの案がありそう。
■案1



■案2



自宅サーバーにPPPoEはらせるのは、なんとなく怖い?ので、案1で考えてみたいとおもう。

DS-Lite設定

https://www.iijmio.jp/service/detail/imh/setup.jsp
を参考に設定を行う。









ゲートアドレスに[gw.transix.jp]を設定して、あとはNDプロキシーを使用するようにする。
NDプロキシーとは…
IPv6のパケットを、ルータを介して通信する機能です。
https://qiita.com/sumomoneko/items/fa56737f97beff3566f3
これで終わりらしい。
気になる速度は・・。
スピードテスト
サイト 機器 下り 上り レイテンシ
Google PC Giga有線LAN 312.8Mbps 318.6Mbps 3ms
Google スマホ1 無線LAN 2.4G 11n 7.61Mbps 36.4Mbps 5ms
Google スマホ2 無線LAN 2.4G 11n 33.3Mbps 38.9Mbps 4ms
fast.com PC 有線LAN 390Mbps 450Mbps 4ms
fast.com スマホ1 無線LAN 2.4G 11n 130Mbps 130Mbps 5ms
fast.com スマホ2 無線LAN 2.4G 11n 49Mbps 41Mbps 5ms
2019/06/18 1時ごろなので、一概に比較は出来ないけど。。

自宅サーバー側の設定

複数ネットワーク接続となるので、デフォルトの通信経路などの設定が必要になる。
Router2は今までどおり192.168.1.0/24、Router1は192.168.2.0/24を使用しようと思う。

webminのアクセス制限

miniserv.confに追記
allow=127.0.0.1 192.168.1.0/24 192.168.2.0/24

NextCloudのアクセス制限

config.phpに追記
  array (
    0 => 'localhost',
    1 => '192.168.1.*',
    2 => '192.168.2.*',
    3 => '##########.mydns.jp',
  )

デフォルトゲートウェイの変更1

Router1(192.168.2.0/24)をデフォルトになるように変更したい。
root@blackcube:~# route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp2s0
0.0.0.0         192.168.2.1     0.0.0.0         UG    101    0        0 enx04ab1822fc5e
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 enx04ab1822fc5e
root@blackcube:~# route del default gw 192.168.1.1
root@blackcube:~# route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         192.168.2.1     0.0.0.0         UG    101    0        0 enx04ab1822fc5e
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
192.168.2.0     0.0.0.0         255.255.255.0   U     101    0        0 enx04ab1822fc5e
https://asmsuechan.hatenablog.com/entry/2018/07/20/181359
https://qiita.com/devzooiiooz/items/256e41c9cfccd00fd593
https://qiita.com/devzooiiooz/items/4e2e1c5264d8960eb412

デフォルトゲートウェイの変更2

さっきのでOKと思ったら、MyServerがRouter1側のグローバルIPを見失ってRouter2側のIPをmydnsに通知している。なぜだ・・・。 その時にroute -nしてみたら192.168.1.1が復活している、しかもMetricが192.168.2.1よりも若いから、そうなるか。
更に調べると、片側のNICのデフォルトゲートウェイを無視する設定が必要みたい さっきの手順は一時的な方法のようだ

nmcli connection modify 有線接続\ 1 ipv4.never-default yes
nmcli connection modify 有線接続\ 1 ipv4.ignore-auto-routes yes
nmcli connection modify 有線接続\ 2 ipv4.never-default no
nmcli connection modify 有線接続\ 2 ipv4.ignore-auto-routes no
service network-manager restart
「有線接続」じゃなくてIF名で指定するのはどうすれば良いのかな? これで様子を見てみるか
 https://torutk.hatenablog.jp/entry/20160506/p1
http://iwsttty.hatenablog.com/entry/2015/03/01/152541
https://qiita.com/kooohei/items/b0931ae210911cc52adc
https://qiita.com/atomyah/items/1989138730f3385844dd

mydnsの更新対応

グローバルIP通知先をhttps://www.mydns.jp/login.htmlからhttps://ipv4.mydns.jp/login.htmlに変更

最終的な構成

Router1にVLAN入れて2ポートWAN側に割り当てた。



あんまり効果が無いような気がしないでもないけど、しばらく使ってみる。

参考

https://www.marbacka.net/blog/ipv4_pppoe_ds-lite_simultaneously/
https://internet.watch.impress.co.jp/docs/column/shimizu/1131132.html
https://qiita.com/nbhr/items/2850ccaa3456a8553bbf

2019年1月21日月曜日

FlashROMの書き換え

今までは、リスクをとった書き換えをやっていたが
http://continue-to-challenge.blogspot.com/2018/05/fon2405eopenwrt.html
一度できたマスターなROMからまるごとコピーする方法にした。
NaonoPIを有効活用してROMライターになってもらった。


左はFONでROM交換できるように交換用のソケットをつけた。
http://www.aitendo.com/product/16564
右はNanoPIでSPIラインをクリップをつけた。
http://www.aitendo.com/product/7311

準備

ハード

NanoPIのレイアウトは
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO#Diagram.2C_Layout_and_Dimension
【NanoPI】
pin name
17 3.3V  
19 SI
20 GND
21 SO
23 CLK
24 CS
【クリップ】
pin name
1 CS#  
2 SO
3 WP#(VCCへ)
4 GND
5 SI
6 SCLK
7 HOLD#(VCCへ)
8 VCC

ソフト

flashromをインストール
apt-get install flashrom
このあたりが参考になる
https://www.flashrom.org/RaspberryPi

読み書き

まずはデバイスを検出してみる

root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L1605A/MX25L1606E/MX25L1608E" (2048 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L1605D/MX25L1608D/MX25L1673E" (2048 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L1605", "MX25L1605A/MX25L1606E/MX25L1608E", "MX25L1605D/MX25L1608D/MX25L1673E"
Please specify which chip definition to use with the -c <chipname> option.
2MのフラッシュROMだねー

読み込んでみる

root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0 -c "MX25L1605" -r /tmp/2m_base.img
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on linux_spi.
Reading flash... done.
2m_base.imgに保存。これを8MBのフラッシュに書き込もうと思う。

書き込んでみる

ファイルサイズをデバイスのサイズに合わせる必要があるみたいなので
この場合は、8MBにする感じ。
root@NanoPi-NEO:~# dd if=/tmp/2m_base.img of=/tmp/8m_base.img ibs=8M conv=sync
0+1 records in
16384+0 records out
8388608 bytes (8.4 MB, 8.0 MiB) copied, 0.238071 s, 35.2 MB/s
これを、8MBのフラッシュに書いてみる
root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E" (8192 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E"
Please specify which chip definition to use with the -c <chipname> option.
書くときは、wでファイル名を指定する。
root@NanoPi-NEO:~# flashrom -p linux_spi:dev=/dev/spidev0.0 -c "MX25L6406E/MX25L6408E" -w /tmp/8m_base.img
flashrom v0.9.9-rc1-r1942 on Linux 4.14.52 (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
これでOK。
フラッシュROMの書き換えが捗るぞー。
参考
https://qiita.com/yamori813/items/28c3fe71840c3277e409

2019年1月20日日曜日

MSP23S09をOpenwrtで使う(再)



半年前の記憶がもう怪しい・・・。
MSP23S09の使い方を思い出す。
https://continue-to-challenge.blogspot.com/2018/06/mcp23s09fon2405eledeopenwrt.html
のままだけど。

SPIを使うための準備

ハードの準備

前回は、ユニバーサル基板で実験したけど、今回は切削で基板を作ってみた。
FlashROMと、CS切り替え用のロジックとLEDx4とUARTが乗っている。
GPIOをCS1に割り当てるのだけど、もともとのCS0と確実に分けるために、not CS0を条件にしたロジックにしている。ものすごく割り切る場合には、CS1 = not CS0で良いんじゃないかと思う。
Deep MMC Old


ソフトの準備

spidevドライバを組み込むようにカーネルを再構築する。
http://continue-to-challenge.blogspot.com/2018/02/fon2405eledeopenwrtspi.html

簡易的な動作確認

/dev/spidev0.1ができているので
echo -en "\x40\x00\x00" > /dev/spidev0.1
で、MSP23S09を出力設定にする。
OPCODEが0x40、コマンドが0x00、入出力設定が0x00という具合
例えば、3を表示させる場合は
echo -en "\x40\x0A\xB0" > /dev/spidev0.1
ロジック・アナライザで出力を見てみると
https://www.saleae.com/ja/downloads/


※この時は試行錯誤していて0x41-0x0A-0x01になってるOrz

自作ドライバでの動作確認

クロスコンパイル環境とドライバ作成を思い出すぞ!
https://continue-to-challenge.blogspot.com/2018/01/fon2405eledeopenwrteclipse.html

クロスコンパイル環境

こんな感じ
Prefix「mipsel-openwrt-linux-musl-」
path「staging_dir/target-mipsel_24kc_musl/bin」
あとは前にやったのと変わりなし。
makeしてできたmcp23s09_7seg.koをscpでボードに転送する

動作確認

indmod mcp23s09_7seg.ko
echo -n 1 > /dev/mcp7dDriver0
で1が7セグに表示される。
段々と思い出してきた。

で、何やりたいかは忘れたOrz.

2019年1月18日金曜日

FON2405Eのフラッシュメモリを交換してOpenwrt導入(再)

久しぶりに、キャラクタ液晶をFONで制御しようと思って過去のやり方をもう一度やろうとしたらLinkももろも変更があって、そのままではできなかった。
再度、構築手順をまとめてみる。しばらくやらないと全く忘れているOrz.

まずは復習


Openwrtのソース取得→生成

 

クローンする


git clone -b openwrt-18.06 https://git.openwrt.org/openwrt/openwrt.git

または<git clone https://git.openwrt.org/openwrt/openwrt.git>

あるいは<git clone -b lede-17.01 https://git.openwrt.org/openwrt/openwrt.git>

場合によっては<git clone -b chaos_calmer git://git.openwrt.org/openwrt/svn-archive/openwrt.git>

cd openwrt

./scripts/feeds update -a

./scripts/feeds install -a

このあと、自分用にgogsにプッシュした。

ブランチを作る

ブランチを作成し、移動する。

git checkout -b fon2405ekai-base

git branch

* fon2405ekai-base

master

また、.gitignoreから/.configを削除してカーネルコンフィグも記録対象にした。

ベースとなる変更

とりあえず、必要最低限と思われる変更をしてみる

ソースの変更

ここに良い手順が書いてあった。
https://openwrt.org/docs/guide-developer/adding_new_device

grep -lri fon2405ekai target/

target/linux/ramips/image/rt305x.mk

target/linux/ramips/dts/FON2405EKAI.dts

target/linux/ramips/base-files/etc/diag.sh

target/linux/ramips/base-files/lib/ramips.sh

target/linux/ramips/base-files/lib/upgrade/platform.sh

変更点の差分は

diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh

index 2f51add..c076d18 100644

--- a/target/linux/ramips/base-files/etc/diag.sh

+++ b/target/linux/ramips/base-files/etc/diag.sh

@@ -26,6 +26,7 @@ get_status_led() {

ex2700|\

ex3700|\

fonera20n|\

+ fon2405ekai|\

firewrt|\

hg255d|\

iodata,wn-gx300gr|\

diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh

index 5741cbd..ddf9a41 100755

--- a/target/linux/ramips/base-files/lib/ramips.sh

+++ b/target/linux/ramips/base-files/lib/ramips.sh

@@ -721,6 +721,9 @@ ramips_board_detect() {

*"YK1")

name="youku-yk1"

;;

+ *"FON2405E Kai")

+ name="fon2405ekai"

+ ;;

esac

# use generic board detect if no name is set

diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh

index ffdc5e7..6785e92 100755

--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh

+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh

@@ -62,6 +62,7 @@ platform_check_image() {

f7c027|\

firewrt|\

fonera20n|\

+ fon2405ekai|\

freestation5|\

gnubee,gb-pc1|\

gnubee,gb-pc2|\

diff --git a/target/linux/ramips/dts/FON2405EKAI.dts b/target/linux/ramips/dts/FON2405EKAI.dts

new file mode 100644

index 0000000..18779c5

--- /dev/null

+++ b/target/linux/ramips/dts/FON2405EKAI.dts

@@ -0,0 +1,104 @@

+/dts-v1/;

+

+#include "rt3050.dtsi"

+

+#include <dt-bindings/gpio/gpio.h>

+#include <dt-bindings/input/input.h>

+

+/ {

+ compatible = "fon,fon2405ekai", "ralink,rt3050-soc";

+ model = "FON2405E Kai";

+

+ aliases {

+ led-boot = &led_power_green;

+ led-failsafe = &led_power_green;

+ led-running = &led_power_green;

+ led-upgrade = &led_power_green;

+ };

+

+ gpio-keys-polled {

+ compatible = "gpio-keys-polled";

+ poll-interval = <20>;

+

+ reset {

+ label = "reset";

+ gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;

+ linux,code = <KEY_RESTART>;

+ };

+

+ wps {

+ label = "wps";

+ gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;

+ linux,code = <KEY_WPS_BUTTON>;

+ };

+ };

+ gpio-leds {

+ compatible = "gpio-leds";

+ wan {

+ label = "fon2405ekai:green:wan";

+ gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;

+ };

+ led_power_green: lan {

+ label = "fon2405ekai:green:lan";

+ gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;

+ };

+ wps {

+ label = "fon2405ekai:green:wps";

+ gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;

+ };

+ };

+};

+

+&spi0 {

+ status = "okay";

+

+ m25p80@0 {

+ compatible = "jedec,spi-nor";

+ reg = <0>;

+ spi-max-frequency = <10000000>;

+

+ partitions {

+ compatible = "fixed-partitions";

+ #address-cells = <1>;

+ #size-cells = <1>;

+

+ partition@0 {

+ label = "u-boot";

+ reg = <0x0 0x10000>;

+ read-only;

+ };

+

+ devconf: partition@10000 {

+ label = "devconf";

+ reg = <0x10000 0x10000>;

+ read-only;

+ };

+

+ firmware: partition@20000 {

+ label = "firmware";

+ reg = <0x20000 0x7b0000>;

+ };

+ };

+ };

+};

+

+&pinctrl {

+ state_default: pinctrl0 {

+ gpio {

+ ralink,group = "i2c", "jtag", "rgmii", "mdio", "uartf";

+ ralink,function = "gpio";

+ };

+ };

+};

+

+&ethernet {

+ mtd-mac-address = <&devconf 0x4>;

+};

+

+&esw {

+ mediatek,portmap = <0x2f>;

+};

+

+&wmac {

+ ralink,mtd-eeprom = <&devconf 0>;

+};

diff --git a/target/linux/ramips/image/rt305x.mk b/target/linux/ramips/image/rt305x.mk

index 23a83f8..c807703 100644

--- a/target/linux/ramips/image/rt305x.mk

+++ b/target/linux/ramips/image/rt305x.mk

@@ -908,3 +908,11 @@ define Device/zorlik_zl5900v2

DEVICE_PACKAGES := kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-netdev

endef

TARGET_DEVICES += zorlik_zl5900v2

+

+define Device/fon2405ekai

+ DTS := FON2405EKAI

+ BLOCKSIZE := 4k

+ IMAGE_SIZE := $(ralink_default_fw_size_8M)

+ DEVICE_TITLE := FON FON2405E KAI

+endef

+TARGET_DEVICES += fon2405ekai

Luciの有効化

lcuiについては、以下を参考にmake menuconfigで選択した。
https://openwrt.org/docs/guide-user/luci/luci.essentials-tomerge
uhttpd
uhttpd-mod-ubus
luci-mod-admin-full
luci-theme-bootstrap
luci-app-firewall
luci-proto-core
libiwinfo-lua

デフォルトのLAN側IPアドレスの変更

uciの初期設定に入れておくことで変更可能みたい
その他、シリアルコンソールログイン時にパスワード必要にしたり、
タイムゾーン変更したりといったものを入れておいた。
https://openwrt.org/docs/guide-user/base-system/uci
https://openwrt.org/docs/guide-user/base-system/system_configuration
https://openwrt.org/docs/guide-developer/uci-defaults

vi package/base-files/files/etc/uci-defaults/99_custom

#!/bin/sh

uci -q batch <<-EOT

set network.lan.ipaddr='192.168.2.1'

set system.@system[0].ttylogin='1'

set system.@system[0].zonename='Asia/Tokyo'

set system.@system[0].timezone='JST-9'

EOT


make menuconfig

make kernel_menuconfig

そしてカーネルイメージ作成

make -j4 V=99

ll bin/targets/ramips/rt305x

合計 6076

drwxr-xr-x 3 adeno adeno 4096 1月 10 01:04 ./

drwxr-xr-x 3 adeno adeno 4096 1月 10 00:57 ../

-rw-r--r-- 1 adeno adeno 21326 1月 10 00:57 config.seed

-rw-r--r-- 1 adeno adeno 2202 1月 10 01:04 openwrt-ramips-rt305x-device-fon2405ekai.manifest

-rw-r--r-- 1 adeno adeno 3075436 1月 10 01:04 openwrt-ramips-rt305x-fon2405ekai-initramfs-kernel.bin

-rw-r--r-- 1 adeno adeno 3097282 1月 10 01:04 openwrt-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin

drwxr-xr-x 2 adeno adeno 4096 1月 10 01:04 packages/

-rw-r--r-- 1 adeno adeno 439 1月 10 01:04 sha256sums

u-bootを使って書き込む


[openwrt-ramips-rt305x-fon2405ekai-initramfs-kernel.bin]を使う。
書き込み手順はlinkと同じ。
具体的には以下の通り。

PC側にTFTPサーバー構築

以下を参考に
https://askubuntu.com/questions/201505/how-do-i-install-and-run-a-tftp-server
http://blog.livedoor.jp/devslife-other/archives/1313413.html
69/UDPを使うのでファイアウォールで許可しておく

PC側と接続

IPは10.10.10.3とした(FONのU-Bootのデフォルトがそうだから) 。
FON側はどっちのLANでもいいのかな? 黒い方(LAN側)に刺した。

書き込み

FONはリセットボタンを押しながら電源ONして、U-Bootの起動オプションで2を選択!
その後、 コマンドラインからサーバーIPなどを入力する

U-Boot 1.1.3 (Jan 6 2010 - 07:10:30)

  

Board: Fonera

DRAM: 32 MB

relocate_code Pointer at: 81fac000

spi_wait_nsec: 3e

spi deice id: c2 20 17 c2 20 (2017c220)

find flash: mx25l6405d

raspi_read: from:41030000 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 selected 2

0

  

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)

Please Input new ones /or Ctrl-C to discard

Input device IP (10.10.10.200) ==:10.10.10.200

Input server IP (10.10.10.3) ==:10.10.10.3

Input Linux Kernel filename (fonita.img) ==:openwrt201901.bin

  

netboot_common, argc= 3

  

NetTxPacket = 0x81FE4DC0

Trying Eth0 (10/100-M)

  

ETH_STATE_ACTIVE!!

Using Eth0 (10/100-M) device

TFTP from server 10.10.10.3; our IP address is 10.10.10.200

Filename 'openwrt201901.bin'.

  

TIMEOUT_COUNT=10,Load address: 0x80100000

Loading: Got ARP REPLY, set server/gtwy eth addr (00:07:40:**:**:**)

Got it

T #

first block received

################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

#################################################################

################

done

Bytes transferred = 3542258 (360cf2 hex)

NetBootFileXferSize= 00360cf2

raspi_erase_write: offs:20000, count:360cf2

raspi_erase: offs:20000 len:360000

raspi_write: to:20000 len:360000

raspi_read: from:380000 len:10000

raspi_erase: offs:380000 len:10000

raspi_write: to:380000 len:10000

Done!

## Booting image at bf020000 ...

raspi_read: from:20000 len:40

Image Name: MIPS OpenWrt Linux-4.14.91

Created: 2019-01-13 9:13:18 UTC

Image Type: MIPS Linux Kernel Image (lzma compressed)

Data Size: 3542194 Bytes = 3.4 MB

Load Address: 80000000

Entry Point: 80000000

raspi_read: from:20040 len:360cb2

書き込みが完了したので、アクセスしてみる

OpenWrt login: root

BusyBox v1.28.4 () built-in shell (ash)

  

_______ ________ __

| |.-----.-----.-----.| | | |.----.| |_

| - || _ | -__| || | | || _|| _|

|_______|| __|_____|__|__||________||__| |____|

|__| W I R E L E S S F R E E D O M

-----------------------------------------------------

OpenWrt 18.06-SNAPSHOT, r0+7650-d58c6ae

if you can dream it, you can do it.

-----------------------------------------------------

=== WARNING! =====================================

There is no root password defined on this device!

Use the "passwd"  command to set up a new password

in order to prevent unauthorized SSH logins.

--------------------------------------------------

root@OpenWrt:/#


なんか、markdown→stackedit→blogspotの連携がうまく行かない・・・。

2018年7月16日月曜日

キャラクタ液晶に天気予報を表示する

暑い・・・。暑すぎる。

キャラクタ液晶の使い道を考えていた。
暑くて、天気予報が知りたくなった。

早速結果からだけど、こんな感じ


1. 天気予報を取得する

livedoorの天気予報サービスを利用させてもらう。
http://weather.livedoor.com/weather_hacks/webservice

都市は「東京」なので「http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

JSONで応答してくれるみたい。
[forecasts][0][telop]に[晴のち曇り]
[forecasts][0][temperature][max][celsius]に[最高気温]

linuxボードにpythonとか入っていないので、awkとsedで頑張る!



2. 天気アイコンをアニメーションしたい

外字(CGRAM)は8種類しかないけれど、書き込むと表示中のものも変更された!
ということは、動的に変更できて、なんちゃってアニメーションできそう。


3. 表示

上段に「サイコウ キオン:●●°C」
下段に「テンキ:■■■■■」
■部分は、例えば「晴のち曇」なら
「晴アイコン」「ハレ」「→」「曇アイコン」「クモリ」

JSON出力はUnicodeで「晴のち曇」は「"\u6674\u306e\u3061\u66c7"」となる。
「のち」なら「→」、「時々」なら「/」とした。
外字は

外字は1s毎に書き換えを行い、アニメーションしてるっぽくした。
また、1時間毎に天気予報を更新する。
(今回は実験なので、この間隔にしたけど、長期に使う場合には、
 利用規約確認したり、迷惑かからないように12時間とか24時間とかのほうがいいかも)

ソース

使いそびれたパラレルキャラクタ液晶のSPI化(2/2)

前回からのつづき
制御用のFON2405E(LEDE・Openwrt)向けドライバ作成

1. SPI仕様

[0x01][コントラスト] ※コントラストは0x00〜0x06
[0x02][コマンド]  ※ RS=0 でLCDに出力
[0x03][データ]   ※ RS=1 でLCDに出力

http://akizukidenshi.com/download/ds/sunlike/SD1602HULB-XA-G-G.PDF
http://219.117.208.26/~saka/ham/LCD2/

2. ドライバ仕様

基本的には、MCP23S09の時と同じ。
キャラクタデバイスとして[/dev/ PicClcdDriver0]が作成される。
これに表示したい内容を流しこめばOK
一方で、各種制御は[/sys/bus/spi/drivers/PicClcdDriver/spi0.1/]に
lcd_clear:Clear Display(全表示クリア)
lcd_set_cgram:Set CGRAM address
lcd_set_ddram:Set DDRAM address
が作成される

3. 動作

insmod pic_clcd.ko
echo > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_clear
echo -n HelloWorld! >  /dev/ PicClcdDriver0

英数字以外 例えば 「イ」とか
echo -ne "\xB2" > /dev/ PicClcdDriver0

外字CGRAM
0番目に「晴?」アイコン
echo 00411040E04110400 > /sys/bus/spi/drivers/PicClcdDriver/spi0.1/lcd_set_cgram



ドライバソースコード

2018年6月3日日曜日

MCP23S09制御用のFON2405E(LEDE・Openwrt)向けドライバ作成

気づけば、毎年同じようなことをやっているような気がするけど。。。
SPI接続のIOエキスパンダ(MCP23S09)を使う+ドライバ作成練習として
7セグ制御を行うドライバを書いてみた




0.前提

・カスタムファーム入りFON2405E
http://continue-to-challenge.blogspot.com/2018/02/fon2405eledeopenwrtspi.html
http://continue-to-challenge.blogspot.com/2018/02/fon2405eledeopenwrtspi144.html

・MCP23S09
3.3Vで動くSPI-IOエキスパンダ
https://www.microchip.com/wwwproducts/jp/MCP23S09


1.手順

(1)eclipceで空のプロジェクト作成
  Makefile project → Empty Project
(2)ソースファイル・Makefile作成
  ソースは末尾のgist参照、Makefileは


(3)ビルド
(4)ターゲットボードに転送
  scpとかで
(5)動作確認
  insmod /tmp/mcp23s09_7seg.ko


2.ソース


3.参考
 ・Raspberry Piで学ぶARMデバイスドライバープログラミング
 ・LINUXデバイスドライバ 第3版
 ・ci-bridge-spi
https://android.googlesource.com/kernel/msm/+/android-msm-hammerhead-3.4-kk-r1/drivers/misc/ci-bridge-spi.c
 ・spike
https://github.com/scottellis/spike/blob/master/spike.c


2018年5月21日月曜日

FON2405Eのフラッシュメモリを交換してOpenwrt導入

LEDEとOpenWrtが統合したらしいので、再度環境構築手順をまとめてみた。

以前の方法
http://continue-to-challenge.blogspot.jp/2017/11/fon2405eledeopenwrt.html
からあまり変更がないかもしれない。

手順0.フラッシュメモリ交換

リスクをとって簡略化した方法で

0.u-boot他を旧フラッシュからバックアップ

cat /dev/mtdblock0 > /tmp/mtdblock0.img  <Uboot>
cat /dev/mtdblock1 > /tmp/mtdblock1.img  <Config>
cat /dev/mtdblock2 > /tmp/mtdblock2.img  <RF>

1.通電状態でフラッシュを交換する(ハイリスク!)
cp /tmp/mtdblock0.img /dev/mtdblock0
cp /tmp/mtdblock1.img /dev/mtdblock1
cp /tmp/mtdblock2.img /dev/mtdblock2

手順1.OpenWrtのカーネルソース入手

ここは変更なし
git clone https://git.lede-project.org/source.git
./scripts/feeds update -a
./scripts/feeds install -a

手順2 FON2405E用にカスタマイズ・Device Tree Source (dts)を作成


ここも変更なし


手順3 カーネルイメージ作成

適宜、設定を行う

make menuconfig
make kernel_menuconfig
そして
make -j4 V=99
openwrt-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
openwrt-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
が作成される

手順4 ファームアップ

u-bootからのファームアップのあと、sysupgradeを実施
カーネルが4.14.41になったのかー。

メモ(git diff)
git diff origin/master..HEAD > FON2405EKAI.patch

2018年2月17日土曜日

FON2405E(LEDE・Openwrt)でSPI〜1.44インチのグラフィック液晶制御(高速化)


前回作ったものが表示が遅い+メモリリークで落ちるため、いくつか見直しを行った
実際の表示はわからないけど、LCDへの書き出し処理は大体16fpsくらい できているみたい

フリー素材のGIF動画を使わせてもらった「いいね!」
https://www.pakutaso.com/gif/gifpost-135.html



やったことは
・vecterの開放(vector<uint8_t>().swap(tbx);)
・SPIの開放忘れ(free(&spi);)

やってもあまり効果なかったこと
・SPI_IOC_MESSAGEのサイズ 結局1度に送れるのは4096Byte?


差分はここんな感じ

メモ
動画やGIFから連続したBMPを作成する
 convert -coalesce -resize 128x128! cinemagraph.gif +adjoin SL%02d.bmp
色を24bitにする
 mogrify -type truecolor SL*.bmp

参考
http://www.c-lang.net/general43/index.html
http://yoppa.org/blog/5862.html
http://cdecrement.blog.fc2.com/blog-entry-65.html

2018年2月11日日曜日

FON2405E(LEDE・Openwrt)でSPI〜1.44インチのグラフィック液晶制御

SPIの動作確認を兼ねて昔に入手した1.44インチのTFT液晶モジュール(多分Z144SN005/aitendo)を繋いでみた。
本当は、IOエキスパンダ+キャラクタ液晶でさっくり確認するつもりだったのだけど、
ヘマしたので・・・。

今回は先に結果から どーん




Z144SN005の情報
単体   http://www.aitendo.com/product/11546
変換基板 http://www.aitendo.com/product/11663
 グラフィックICはST7735Sらしい
サイズ  128x128

データシートと先人たちのライブラリもありがたく確認させてもらう
データシート https://www.crystalfontz.com/controllers/Sitronix/ST7735S
      v1.3が最新?
ライブラリ https://github.com/adafruit/Adafruit-ST7735-Library
     https://github.com/michal037/driver-ST7735S

接続
LCD側--------FON側
VLED--------5V
RST--------VCC(3.3V)
A0--------GPIO9 データ/コマンド切り替え
SDA--------SDO(Master Output)
SCK--------SCK
VCC--------VCC(3.3V)
CS--------GPIO12(CS#2)
GND--------GND

SPI制御
/dev/spidev0.1をioctlで制御
ネット上にサンプルいっぱいあるから省略

A0(データ/コマンド切り替え)制御
 こちらはGPIOを割り当てる(sysfsというのだろうか)
 https://wiki.openwrt.org/doc/hardware/port.gpio
 https://elinux.org/RPi_GPIO_Code_Samples
 汎用性とかありそうなので・・・。
 ただし、ofstreamを使うとタイミングがずれたり出力されないことがあった
 たぶん書き込み処理が最適化されてキャッシュされたりなんかだろう
 あまり突き詰めたくないので、上記例の通りopen/writeを使う

ST7735S用ライブラリ
 先人たちの偉業を参考に作成
 現状、若干モジュールに特化してしまっている感もある


200円くらいのジャンクFONでついにここまで来れた。
ArduinoとかRaspberryPiとか使えば一瞬なのは知ってる。
これぞ趣味の世界

他にもいろいろ動かしたい!


他のグラフィック液晶・OLED
なんだか行けそうな気がする

I/Oを増やしたい
SPI IOエキスパンダ(MCP23S08-E)を秋月電子で買ったら、動作電圧が5VだったOrz。
しかもSPI系のHi検出レベルが 0.8VDD。 FONは3.3Vなのでた、足りない。
仕方がないので、動作電圧が1.8V〜5.5VのMCP230S09を入手予定。
8-Eの方は、マイコンとか74HC14とかと一緒に使うとするか。
入手でき次第対応する
まだ、SPIでの入力をやっていないからこのタイミングでやってみよう

キャラクタ液晶が・・・
昔にまとめ買いしたキャラクタ液晶が余ってる。
最近のI2Cとかじゃない8bitパラレルインターフェースだよ。
IOエキスパンダ経由で制御してみるか。

SD/MMCカード
SPIでの入出力できるようになってから
多分SPI-MMC的なドライバをカーネルコンフィグ時に選択すれば良いような気がする

FON2405E(LEDE・Openwrt)でSPIデバイス追加

ようやくFONの活用に向けての一歩

フラッシュメモリが接続されているSPIポートを汎用的に使えないか

考えることはみんな同じで、すでにやっている人が居る
というかOpenWrtのHPに書いてある→Deep MMC Mod

・もともとのCS#1にインバーターを繋いでCS#2とするもの
・GPIOを1つ潰してCS#2に割り当てるもの

実現方法
極力ハードを増やしたくなかったので、GPIOにCS#2を割り当てる方法を考えることにした。
CSは負論理なので、起動時からHのままのGPIO12を使うことにした。
ubootもカスタマイズできれば、どのGPIOでも良いんだろうけど。

SPI通信のためにハードは16pinSPIフラッシュ用のランドから線出し
外れないようにホットボンドで固定
黒なので見栄えが少しイマイチ

ソフトは変更点だけを書き出すとこれだけ・・・。
dtsファイル変更、カーネルコンフィグでSPI_SPIDEV追加。
・gpio-ledsからGPIO12に関する定義をコメントアウト
・spi定義部分にcs-gpios追加
・spi定義部分にspidevを追加

ビルド→ファームアップ→デバイス確認

おぉぉぉ
ちなみに、spidevドライバを組み込むとbootログで注意されるみたい
次は動作確認だー

2018年1月23日火曜日

FON2405E(LEDE・Openwrt)のクロス開発環境(Eclipse)構築メモ

Eclipseを使ってエレガント?にクロス開発環境を構築したときの備忘録
基本的にはラズベリーパイのときと同じ

0.前提
 ・Eclipse
 ・FON2405E(LEDE)とSSH接続可能

1. クロスコンパイル環境
 ここにある
 「lede/source/staging_dir/toolchain-mipsel_24kc_gcc-5.5.0_musl/bin/」
 参考→https://wiki.openwrt.org/doc/devel/crosscompile

2.FON2405E(LEDE)側の準備
 
 ・sftpserver(OpenSSH SFTP server)
 ・gdbとgdbserver
 を追加してカーネル作成

3.Eclipse側の設定

 (1)プロジェクト設定
   ・CROSS設定にて

   ・接頭Prefixは「mipsel-openwrt-linux-」
   ・パスは「1.」参照

 (2)デバッグ設定


・Connectionで「New」 選択にて良きに計らう


・GDB debuggerは「mipsel-openwrt-linux-gdb」


あとはラズベリーパイの時と同じで行けた!

2018年1月22日月曜日

FON2405E(LEDE・Openwrt導入後の備忘録)

いろいろとやっていて忘れそうなのでメモ

1.実はGPIO9もある

今まで
・WAN(地球儀マーク?) GPIO12
・LAN GPIO11
・WPS GPIO14
だと思っていたら
WANにはGPIO9も接続されていることがわかった。
なんで今までわからなかったんだろう・・・。



 2.LANポートの割り当て

 LAN1<WAN> 白 IC面を上にして左側
 LAN3<LAN> 黒 IC面を上にして右側
 VLANは以下の通り

2017年11月3日金曜日

FON2405Eのフラッシュメモリを交換→成功→LEDE・Openwrt導入

約1年ほど前にFON2405Eのフラッシュメモリを交換して失敗した。
http://continue-to-challenge.blogspot.jp/2016/11/fon2405e_28.html
またまた魔が差して、 他の基板からMX25L6405D (8192 Kbytes)を引っぺがして交換してみた。
もともと乗っていたのがMX25L8006Eだから上位品?。
すんなりU-Bootでのファーム書き換えはできた。

せっかくなので、OpenwrtからスピンオフしたというLEDEを導入してみることにした。


手順0 フラッシュ交換メモ

忘れそうなので・・・。
0.u-boot他を旧フラッシュからバックアップ
cat /dev/mtdblock0 > /tmp/mtdblock0.img  <Uboot>
cat /dev/mtdblock1 > /tmp/mtdblock1.img  <Config>
cat /dev/mtdblock2 > /tmp/mtdblock2.img  <RF>
3と4はu-bootから書き込むからここではバックアップしない
 mtdblock0-2.imgはPCに退避させておく

1.u-bootの起動メニューで「2」入力しコンソール?に入る
2.通電状態でフラッシュ交換する(ハイリスク!)
3.ファーム書き換えを実行
  KernelとRootFSが書き換えられ、その後linuxのブートに入る
4.新フラッシュにu-boot他を書き込む
cp /tmp/mtdblock0.img /dev/mtdblock0
cp /tmp/mtdblock1.img /dev/mtdblock1
cp /tmp/mtdblock2.img /dev/mtdblock2
今思えばu-bootさえ書き込めれば、あとはLEDE書き込むから
別にやらなくても良かった。

手順1 LEDEのカーネルソース入手

基本的には以下の手順だけど
https://lede-project.org/docs/guide-developer/the-source-code
https://lede-project.org/docs/guide-developer/use-buildsystem

具体的な手順は次のような感じ。簡単だね。
git clone https://git.lede-project.org/source.git
./scripts/feeds update -a
./scripts/feeds install -a 

手順2 FON2405E用にカスタマイズ・Device Tree Source (dts)を作成

オリジナルのFON2405Eとは違うのでFON2405EKAI(改)とした。
変更点をpatchにしてみた。 
完成するまでは紆余曲折あって大変だったけど。 改めてみると変更点って大したこと無いね。
(実は9月末くらいから悩みながらやっていた)

手順3 カーネルイメージ作成

適宜、設定を行う
make menuconfig
make kernel_menuconfig
そして
make -j4 V=99

lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
が作成される

手順4 ファームアップ

まずは、u-bootからファームアップを行う
 lede-ramips-rt305x-fon2405ekai-initramfs-kernel.bin
を使う。
これで起動すると・・・。
[    4.689131] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    4.699191] 3 ofpart partitions found on MTD device spi0.0
[    4.710330] Creating 3 MTD partitions on "spi0.0":
[    4.720086] 0x000000000000-0x000000010000 : "u-boot"
[    4.733996] 0x000000010000-0x000000020000 : "devconf"
[    4.749129] 0x000000020000-0x0000007d0000 : "firmware"
と、rootfsがない状態になる。
設定変更しても反映されない悲しい状態。
どうやらsysupgradeにて再度ファームアップが必要みたい(たぶん)。
sysupgrade -v /tmp/lede-ramips-rt305x-fon2405ekai-squashfs-sysupgrade.bin
このあと起動すると
[    0.614392] m25p80 spi0.0: mx25l6405d (8192 Kbytes)
[    0.624447] 3 ofpart partitions found on MTD device spi0.0
[    0.635587] Creating 3 MTD partitions on "spi0.0":
[    0.645343] 0x000000000000-0x000000010000 : "u-boot"
[    0.659229] 0x000000010000-0x000000020000 : "devconf"
[    0.674223] 0x000000020000-0x0000007d0000 : "firmware"
[    1.385424] 2 uimage-fw partitions found on MTD device firmware
[    1.397553] 0x000000020000-0x000000147454 : "kernel"
[    1.411314] 0x000000147454-0x0000007d0000 : "rootfs"
[    1.426108] mtd: device 4 (rootfs) set to be root filesystem
[    1.439008] 1 squashfs-split partitions found on MTD device rootfs
[    1.451676] 0x000000331000-0x0000007d0000 : "rootfs_data"
となった。やったー。
Luciも開けた!

諦めずにやってよかったー。
//SST26VF032bもどうにかしないと
<参考>
https://wiki.openwrt.org/doc/devel/add.new.platform
https://wiki.openwrt.org/doc/devel/add.new.device
https://wiki.openwrt.org/doc/howto/build
https://wiki.openwrt.org/doc/techref/flash.layout
https://lede-project.org/docs/user-guide/extroot_configuration
http://rainbowdevil.jp/?p=1247

http://www.srchack.org/article.php?story=20150829103857687