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

2019年8月18日日曜日

Openwrtでオレオレなレポジトリ

暑くてやる気が1/3くらいになっている。
そんなんで、いろいろミスするよね・・・。
今回は、fon2405e改にasterisk入れようと思ったけど、フラッシュメモリ8MBじゃあ到底入らなかった。
事前に検証しておけばよかったね。
ということで、タイトルがこんな感じになっている。

久しぶりのソースからビルド

基本的には、前回と同じだけど。
https://continue-to-challenge.blogspot.com/2019/01/fon2405eopenwrt.html
fon2405e用にいくつか変えないといけない。

Openwrtのソース取得→生成

git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

ベースとなる変更

変更点は以下の3ファイル
ファイル名だったりが前回と違うみたい。
grep -lri fon2405e target/
target/linux/ramips/image/rt305x.mk
target/linux/ramips/dts/rt3050_fon_fon2405ekai.dts
target/linux/ramips/base-files/etc/board.d/01_leds

rt305x.mk

前回と記載内容がちょっと異なる。
@@ -527,6 +527,16 @@ define Device/fon_fonera-20n
 endef
 TARGET_DEVICES += fon_fonera-20n
 
 +define Device/fon_fon2405ekai
+  MTK_SOC := rt3050
+  IMAGE_SIZE := 7872k
+  IMAGES += factory.bin
+  DEVICE_VENDOR := Fon
+  DEVICE_MODEL := Fon2405ekai
+  SUPPORTED_DEVICES += fon_fon2405ekai
+endef
+TARGET_DEVICES += fon_fon2405ekai
+
 define Device/hame_mpr-a1
   MTK_SOC := rt5350
   BLOCKSIZE := 4k

rt3050_fon_fon2405ekai.dts

[partition@20000]に「compatible = “denx,uimage”;」を追加した。
これがないとoverlayが出来ないみたい。
@@ -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 {
+                compatible = "denx,uimage";
+                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>;
+};

01_leds

@@ -170,6 +170,7 @@ dlink,dwr-922-e2)
  ucidef_set_led_netdev "4g" "4g" "$boardname:green:4g" "wwan0" "tx rx"
  ;;
 dovado,tiny-ac|\
+fon,fon2405ekai|\
 fon,fonera-20n)
  set_wifi_led "$boardname:orange:wifi"
  ;;

ビルド

make -j4 V=99
ls -l bin/targets/ramips/rt305x/
合計 9972
-rw-r--r-- 1 adeno adeno    2505  8月 18 16:36 config.buildinfo
-rw-r--r-- 1 adeno adeno     263  8月 18 16:36 feeds.buildinfo
-rw-r--r-- 1 adeno adeno    3099  8月 18 16:39 openwrt-ramips-rt305x-fon-fon2405ekai.manifest
-rw-r--r-- 1 adeno adeno 3361462  8月 18 16:39 openwrt-ramips-rt305x-fon_fon2405ekai-initramfs-kernel.bin
-rw-r--r-- 1 adeno adeno 3407898  8月 18 16:39 openwrt-ramips-rt305x-fon_fon2405ekai-squashfs-factory.bin
-rw-r--r-- 1 adeno adeno 3408666  8月 18 16:39 openwrt-ramips-rt305x-fon_fon2405ekai-squashfs-sysupgrade.bin
drwxr-xr-x 2 adeno adeno    4096  8月 18 16:37 packages
-rw-r--r-- 1 adeno adeno     740  8月 18 16:39 sha256sums
-rw-r--r-- 1 adeno adeno      17  8月 18 16:36 version.buildinfo
これの[openwrt-ramips-rt305x-fon_fon2405ekai-initramfs-kernel.bin]を使って書き換えを行う

Luciアクセス

Web(Lcui)にアクセスしてみる


(OpenWrt SNAPSHOT, r0+10779-51fec85)

[openwrt-ramips-rt305x-fon_fon2405ekai-squashfs-sysupgrade.bin]にてファームアップを行う。これで、overlayされる。
#df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 3.0M      3.0M         0 100% /rom
tmpfs                    13.9M    432.0K     13.5M   3% /tmp
tmpfs                    13.9M     68.0K     13.8M   0% /tmp/root
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock5            4.5M    248.0K      4.2M   5% /overlay
overlayfs:/overlay        4.5M    248.0K      4.2M   5% /
これで準備できた

オレオレなリポジトリ

https://qiita.com/hnw/items/17f3a63dbc153f8a5c34
を参考にオレオレのリポジトリを追加する

サーバー側の準備

ls -l bin/packages/mipsel_24kc/
合計 20
drwxr-xr-x 2 adeno adeno 4096  8月 18 16:37 base
drwxr-xr-x 2 adeno adeno 4096  8月 18 02:10 luci
drwxr-xr-x 2 adeno adeno 4096  8月 18 02:11 packages
drwxr-xr-x 2 adeno adeno 4096  8月 18 01:30 routing
drwxr-xr-x 2 adeno adeno 4096  8月 18 16:38 telephony
このデイレクトリをルートにhttpサーバーを構築する。
今回は一時的に欲しいだけなのでphpを用いて
php -S 192.168.2.10:8000
これでOK

デバイス側の準備

/etc/opkg/customfeeds.conf
# add your custom package feeds here
#
# src/gz example_feed_name http://www.example.com/path/to/files
src/gz my_feed_base http://192.168.2.10:8000/base
src/gz my_feed_luci http://192.168.2.10:8000/luci
src/gz my_feed_packages http://192.168.2.10:8000/packages
src/gz my_feed_routing http://192.168.2.10:8000/routing
src/gz my_feed_telephony http://192.168.2.10:8000/telephony
これでOK
opkg updateとかやってみて、ちゃんとオレオレから取得出るかを確認する

asteriskのインストール(容量不足で失敗)

opkg install asterisk16 asterisk16-cdr asterisk16-chan-sip \
asterisk16-codec-gsm asterisk16-codec-ulaw asterisk16-format-gsm \
asterisk16-format-pcm asterisk16-res-agi asterisk16-res-rtp-asterisk
途中まではうまく行ったけど、容量不足で失敗…。
こうなったらeMMCとかMMCカードか?
今日はここまで。

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

2016年12月25日日曜日

ラズベリー・パイでSST26VF032の読み書き

11月の末頃にFONのフラッシュ容量拡張のために
SST26VF032Bを入手した。 
microchipのオンラインストアから注文できるし、3日程度で到着した気がする。
しかし、そのまま交換してもフラッシュに書き込みができなかった。Orz

注意
 SST26VF032はSPIモードでの書き込みに対応していないので、「B」有りが必要。
http://www.microchip.co.jp/support/faq_sst-fm.html
このあたりをあまり気にせずに購入していた。危なかった。。。

基礎知識
をあまり持っていなかったので、他の型番の日本語のデータシートなどを読んで雰囲気を学習
http://www.onsemi.jp/pub_link/Collateral/ENA2097JP-D.PDF
http://japan.xilinx.com/xcell/xl55/jp55xcell_13.pdf


そしてSST26VF032Bについて
・データシート
http://ww1.microchip.com/downloads/jp/DeviceDoc/jp566514.pdf
 ・サンプルプログラム
http://www.microchip.com/wwwproducts/jp/SST26VF032B
 →末尾のソフトウェア

初期化
Quad I/Oとか特殊なものを使わないのであれば、初期化すべき項目は少ないと思う。
01H WRSRでIOCとWPENの設定くらい
JEDEC-IDを読んで対象のデバイスかどうかを確認しておく

読み込み方法
03H Readですんなりと読み出すことができる

書き込み方法
一番手こずった
PinのWriteProtectや06H WREN、そしてBlockProtectなんてものもあるOrz
最後のBlockProtectを失念していたために半月くらい悩んだ。
前述のサンプルプログラムを最初から見ておけばよかった。
こんな流れ
1.06H WREN WriteEnable
2.42H WBPR BlockProtection解除
3.02H PP PageProgram
4.05H RDSR BUSYチェック

こんな感じ。


2016年12月8日木曜日

FON2405E カスタムファーム用のドライバ開発

前回、準備としてなんちゃってドライバを作成して、insmodするところまでいけた。
次は自力シリアル通信ドライバを作成(ラズベリー・パイ用に作った奴の移植)をしてみる。



1.概要
ドライバ名はMy2nd(まだ名称が決まってないOrz)コードは末尾に記載。
Makefileは前回からドライバ名のみ変更した。


2.導入
nfsマウント
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
insmodしてみる

メッセージのメジャー番号が253 マイナー番号が0が重要で、コレがないと/dev/●●が作成できない。
カーネルのバージョンがアレなので、手動でスペシャルファイル?を作成する必要がある。
mknod /dev/My2nd0 c 253 0
とするとMy2nd0というデバイスファイルが作成できる。

3.テスト
 作成したMy2nd0に対してechoで文字列を送ってみる。
 echo -n HelloWorld!! > /dev/My2nd0

するとPIC側のコンソールに表示される。

やったーうまくいった!

4.コード
こんな感じ


2016年11月16日水曜日

FON2405E カスタムファーム用のドライバ開発(準備)

FON2405EのGPIOを使ってシリアル通信をさせるため、いろいろ回り道をしながら挑戦を続けてきた。
今回は、RalinkSDKで作った FON2405E用カスタムファームに向けたドライバ開発について。

1.カスタムファームの変更

まずは、カーネルコンフィングの変更
[make menuconfig]で、[Loadable module support]以降を適当に有効化しておく
Enable loadable module supportとか。
これを忘れていて、make時にprintkとかが定義されていないと怒られた。ハマった。
http://stackoverflow.com/questions/31195516/error-building-android-kernel-module-on-ubuntu-14-04

その他に、insmodとかlsmodとか必要に応じで、有効にしておく。

ファームができたら、FONに入れておく。

2.テスト用ドライバの作成

とりあえず、準備なので何でも良い。やっつけコードを、末尾に記載。

3.Makefileの準備

 ここがいろいろ試行錯誤した。

4.いざ、Make


一撃! うれしい!! 未使用変数の注意が出ているけど、知っているやつなので、放置。

これで、my1st.koができた。

5.NFSマウント

SDKのマニュアルどおり。
mount -o nolock 10.10.10.3:/var/lib/tftpboot /mnt
でOK

6.insmodしてみる

作成したmy1st.koをinsmodすると・・・。


よかったーーー。 ちゃんとprintkも動いている。
あきらめずに続けてよかった。
ラズベリー・パイで下準備しておいて本当によかった。

2015年5月9日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(WEB制御)

目的

前回、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。
今回は、コマンドラインの操作をWEBから行えるように変更した。

概要

WEBからクリア、行移動、文字出力を行う。
PICからの受信は次回の課題。




結果



FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加2)

目的

前回、受信機能を追加したが、1Byteのみだった。
今回は、複数Byteの受信を拡張した。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
400回のコマンド送信に対して、送信NGは52回 13%くらい
なんか前よりも増えた気がする…。
受信の方は、PICから「Hello!!」を送信。100回中NGは5回 5%くらいか
こっちはこんなもんか??

これで、双方向の複数バイトデータを扱えるようになった。
ようやくここまで来た。
ラズベリーパイでも良いのだけれど、ちょっと高い。
このFONならば、中古だけど、ACアダプタと本体で 500円〜なので、
心置きなく遊び倒せる。

何をやったか


電文
変更点

2015年4月25日土曜日

FON2405EのGPIOでキャラクタ液晶を制御する(受信機能追加)

目的

前回、チェックサムと送達確認(PICマイコンからFONに対して応答)を行うようにした。
 今回は、送達確認を拡張して受信機能(PICマイコンからFONに対してコマンドを出せる)ようにした。

概要

チェックサムOKの場合に、FONに対してACKを送信する。
 シリアル通信のクロックはFON側で生成しているので、
 イメージとしてはSPI通信に近いと思う。

結果

前回同様に1秒毎に顔文字「Adeno(^o^)mm-ss」※mm-ssは分-秒を送信し続けると、
 400回のコマンド送信に対して、送信NGは15回
  80回のときは、2回 2〜3%くらい?
 結果は地味だけど、PIC→FON方向の通信ができるようになったのは大きい


何をやったか

・フォーマット
1.データを送信するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [STX][チェックサム][DATA][ETX]
  受信データPIC→FON  1byte前に対する受信結果

2.送信結果を確認するとき
  種類   方向
  クロック FON→PIC 385us
  送信データ      [ENQ]
  受信データPIC→FON  1byte前に対する受信結果

黄色・・・クロック
水色・・・受信データ(PIC→FON)この場合はACK(0x06)

------------------------------------------------
gpio_write_sr Start:CLK=12 DATA_OUT=11 DATA_IN=14
Send:[STX][CHKSUM = 14][DATA][ETX]<-4ms->[ENQ]
Input      = 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
RcvChk     = OK
Total Time = 307ms
------------------------------------------------

・FON側
・PIC側
受信処理の後、に送信したいものを出力するだけ
↓受信処理
sr_buf = ((sr_buf<<1) & 0xFE) | (0x01 & DATA_PORT);
↓送信処理
 //DATA 出力
 if((sr_out & sr_out_mask) == 0){
   DATA_OUT_PORT = 0;
}else{
         DATA_OUT_PORT = 1;
 }
 sr_out_mask = sr_out_mask >> 1;

・エラー発生回数測定用スクリプト
今日はここまで、次回は、PICからなにかデータを送信させてみるか