MT7620AでNANDを使う (OpenWrt 23.05 kernel 5.15.198)
2026年6月10日(水) 23:27 JST
閲覧数 17
気がついてませんでしたが、MT7620AのNANDドライバが消えてました。
OpenWrtでの話です。
OpenWrt 23.05で確認したら無かったです。その後も無いので、kernel 4.xのどこかで捨てられてしまった様です。

簡単に動かせたので、メモ。
探したら、x-wrtではサポートされていたので、そこから差分を拝借しました。
https://github.com/x-wrt/x-wrt
最新から拾ってきて良さそうです。
確認したのは、commit: 372c1d30d0be58b70092710a5c298a321fb42318 のコード。
拝借するコードは、以下の3つ。
target/linux/ramips/patches-5.15/0038-mtd-ralink-add-mt7620-nand-driver.patch
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.c
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.h
このコードを元に、OpenWrt 23.05で動かします。
https://github.com/openwrt/openwrt/tree/openwrt-23.05
commit: 7f61f9625550a6214e5cc53424e105bcbcff8c7a をベースに確認をとりました。
1. ドライバのコードを配置 (x-wrtのコードをそのまま)
OpenWrt 23.05では、ファイルの配置がx-wrtとは異なるので、以下の様に配置します。
target/linux/ramips/patches-5.15/961-mtd-ralink-add-mt7620-nand-driver.patch
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.c
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.h
2. mt7620のkernelに組み込む
target/linux/ramips/mt7620/config-5.15 にCONFIGを追加
3. mt7620のfeatureにnandを追加
これをやっておかないと、nand依存のパッケージ系が使えないので、入れておく。
target/linux/ramips/mt7620/target.mk
4. dtsの修正
YUKAI BOCCOをターゲットに追加しました。
target/linux/ramips/dts/mt7620a_yukai_bocco.dts
パーティション構成は、お好きに。
u-bootはNANDをサポートした状態になっていないので、あくまでLinuxから使うためのパーティション。
パーティションを切る必要があるかは、考え方次第ですが。NANDなのでファイルシステムとか考えないといけません。
最近ならubifs一択な気もしなくもないですが、eMMCが流行ってから触る機会が少ないので、この機会に見てみるのもありですね。
(ちなみに、OpenWrt Chaos Calmer辺りの頃だと、まだjffs2が主流だったのですが、kernel 5.15で昔作ってたjffs2ファイルシステムはマウントできませんでした。イロイロ変わってしまってました。)
5. YUKAI BOCCOのNANDに合わせる
YUKAI BOCCOに搭載されていたNANDが、ESMT F59L4G81A だったのですが、ページサイズが合っていない為、エラーがでます。
F59L4G81A
強制的にページサイズを合わせるパッチを用意しました。
962-mtd_is_nand_page_2048.patch
OpenWrt 23.05向けに、差分を作っておきました。
openwrt-23.05_support_nand.diff
次は、SPI Flashが8MBしかないので、NANDブートに対応させるか悩み中。
調べたら、入っているubootはNANDがサポートされていないので、ubootから作らないといけないですが、
uboot mainlineだとmt7620のnandドライバが無いです。
SPI FlashからLinux kernelは読んで、rootfsだけNANDに配置の方が、簡単な気はします。
あえてNANDからブートさせるメリットがあるかどうか。
OpenWrtでの話です。
OpenWrt 23.05で確認したら無かったです。その後も無いので、kernel 4.xのどこかで捨てられてしまった様です。
簡単に動かせたので、メモ。
探したら、x-wrtではサポートされていたので、そこから差分を拝借しました。
https://github.com/x-wrt/x-wrt
最新から拾ってきて良さそうです。
確認したのは、commit: 372c1d30d0be58b70092710a5c298a321fb42318 のコード。
拝借するコードは、以下の3つ。
target/linux/ramips/patches-5.15/0038-mtd-ralink-add-mt7620-nand-driver.patch
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.c
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.h
このコードを元に、OpenWrt 23.05で動かします。
https://github.com/openwrt/openwrt/tree/openwrt-23.05
commit: 7f61f9625550a6214e5cc53424e105bcbcff8c7a をベースに確認をとりました。
1. ドライバのコードを配置 (x-wrtのコードをそのまま)
OpenWrt 23.05では、ファイルの配置がx-wrtとは異なるので、以下の様に配置します。
target/linux/ramips/patches-5.15/961-mtd-ralink-add-mt7620-nand-driver.patch
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.c
target/linux/ramips/files/drivers/mtd/maps/ralink_nand.h
2. mt7620のkernelに組み込む
target/linux/ramips/mt7620/config-5.15 にCONFIGを追加
CONFIG_MTD_NAND_MT7620=y
3. mt7620のfeatureにnandを追加
これをやっておかないと、nand依存のパッケージ系が使えないので、入れておく。
target/linux/ramips/mt7620/target.mk
FEATURES+=usb nand ramdisk
4. dtsの修正
YUKAI BOCCOをターゲットに追加しました。
target/linux/ramips/dts/mt7620a_yukai_bocco.dts
パーティション構成は、お好きに。
u-bootはNANDをサポートした状態になっていないので、あくまでLinuxから使うためのパーティション。
パーティションを切る必要があるかは、考え方次第ですが。NANDなのでファイルシステムとか考えないといけません。
最近ならubifs一択な気もしなくもないですが、eMMCが流行ってから触る機会が少ないので、この機会に見てみるのもありですね。
(ちなみに、OpenWrt Chaos Calmer辺りの頃だと、まだjffs2が主流だったのですが、kernel 5.15で昔作ってたjffs2ファイルシステムはマウントできませんでした。イロイロ変わってしまってました。)
nand {
compatible = "mtk,mt7620-nand";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "nand0";
reg = <0x0 0x17f00000>;
};
partition@17f00000 {
label = "nand1";
reg = <0x17f00000 0x100000>;
};
partition@18000000 {
label = "nand2";
reg = <0x18000000 0x2000000>;
};
};
};
5. YUKAI BOCCOのNANDに合わせる
YUKAI BOCCOに搭載されていたNANDが、ESMT F59L4G81A だったのですが、ページサイズが合っていない為、エラーがでます。
F59L4G81A
強制的にページサイズを合わせるパッチを用意しました。
962-mtd_is_nand_page_2048.patch
OpenWrt 23.05向けに、差分を作っておきました。
openwrt-23.05_support_nand.diff
次は、SPI Flashが8MBしかないので、NANDブートに対応させるか悩み中。
調べたら、入っているubootはNANDがサポートされていないので、ubootから作らないといけないですが、
uboot mainlineだとmt7620のnandドライバが無いです。
SPI FlashからLinux kernelは読んで、rootfsだけNANDに配置の方が、簡単な気はします。
あえてNANDからブートさせるメリットがあるかどうか。


