ジャンル不定の日記です。

RTL8189FTV用ドライバの作成に失敗・・・

Orange pi R1のwifiチップはRTL8189FTVなわけだが、
https://linux-sunxi.org/Wifi によると
$ git clone https://github.com/jwrdegoede/rtl8189ES_linux.git
$ cd rtl8189ES_linux.git git
$ checkout -B rtl8189fs origin/rtl8189fs
$ make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnu- KSRC=../linux
で作れるぽいことが書いてある。

クロスコンパイラは手元のに合わせてやってみたが、
  LD [M]  /run/media/user/1c2f8fa0-9a7c-4de1-b384-9d5e79bbf856/src/opi-r1/rtl8189ES_linux/8189fs.o
  Building modules, stage 2.
  MODPOST 1 modules
ERROR: "wiphy_free" [/run/media/user/1c2f8fa0-9a7c-4de1-b384-9d5e79bbf856/src/opi-r1/rtl8189ES_linux/8189fs.ko] undefined!
ERROR: "cfg80211_unlink_bss" [/run/media/user/1c2f8fa0-9a7c-4de1-b384-9d5e79bbf856/src/opi-r1/rtl8189ES_linux/8189fs.ko] undefined!
.
.
.
ERROR: "cfg80211_inform_bss_frame_data" [/run/media/user/1c2f8fa0-9a7c-4de1-b384-9d5e79bbf856/src/opi-r1/rtl8189ES_linux/8189fs.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:94: __modpost] エラー 1
make[1]: *** [Makefile:1609: modules] エラー 2
make[1]: ディレクトリ '/run/media/user/1c2f8fa0-9a7c-4de1-b384-9d5e79bbf856/src/opi-r1/linux' から出ます
make: *** [Makefile:1719: modules] エラー 2
途中省略したが、stage 2に移行したあとに作業ディレクトリに 8189fs.ko が見つからないと大量に言われて失敗した。
8189fs.koはないが、8189fs.oはできあがってる。
本来ならstage1の最後に.oを元に.koが作成されるぽい?

解決方法がわからずとりあえず断念したが、
linuxの方を、
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git --depth=1
で持ってきてたが、これ開発版みたい。
それが問題な可能性も考えて、
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -b linux-5.4.y --depth=1
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- sunxi_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- zImage
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- dtbs
で作り直した。
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git の方が安定版で、ブランチlinux-5.4.yが最新版。

だが、結局同じエラーに。
作り直したkernelはまだ試してない。

Orange pi R1でArch Linux起動した

前の記事に書いたが、朝原因わかったので昨日断念したOrange pi R1でArch Linuxを再トライ。

同じSD使ったんで、u-boot本体はパーティションの外に入ってるんで、フォーマットしてrootfs展開してboot.scrだけ更新。
rootfsはext4にした。
自ビルドカーネルのmenuconfigみたらext4しかチェックされてなかったので、とりあえずext4が無難と判断。
最終的にはフラッシュメモリ向きのFSにしたいかな。

boot.cmd
setenv bootargs root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyS0,115200
load mmc 0:1 ${kernel_addr_r} /boot/zImage
load mmc 0:1 ${fdt_addr_r} /boot/${fdtfile}
if load mmc 0:1 ${ramdisk_addr_r} /boot/initramfs.img;then
    bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r};
else
    bootz ${kernel_addr_r} - ${fdt_addr_r};
fi;
こんな感じにした。
/boot/initramfs.img がない場合はinitramfsを使わない。ある場合は使う。あってもなくても起動した。
注意点はカーネルパラメータに rw つけないとエラー多発でログイン不能になる。
あと、ArmbianはramdiskがuImageだったからと思うが、Archの場合は bootz にramdiskを渡すときにサイズも入れる必要があった。入れないとboot失敗する。

初期パスワードは、
root(root) と一般ユーザのalarm(alarm)

zImageを昨日作った自ビルドのものに差し替えても起動した。
自ビルドカーネルは5.5.0-rc5になってたけど、stableが5.4.11なのね。stableにしとくべきだった。

自ビルドしたROMで起動しない原因わかった!

昨日からOrange pi R1 を自ビルドしたkernelとu-bootで起動しようとしてできなかったが、
Arch Linuxだとどうにもならんので、起動するArmbianのイメージを書き換えてみた。

boot.cmd
setenv bootargs root=/dev/mmcblk0p1 rootwait rootfstype=ext4 console=ttyS0,115200
load mmc 0:1 ${kernel_addr_r} /boot/zImage
load mmc 0:1 ${fdt_addr_r} /boot/${fdtfile}
load mmc 0:1 ${ramdisk_addr_r} /boot/uInitrd
bootz ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r};
これで /boot/boot.scr を作成した。
.dtbファイルの変わるので自ビルドしたやつを配置した。
結果、起動した。

次に自ビルドしたu-boot本体をddで書き込んだ。
Starting kernel ...

Uncompressing Linux... done, booting the kernel.
initramfsの形式が違うからと思うが1行増えたが止まった。

どうもu-boot本体がおかしいみたい。

u-bootのバージョンを確認したが、
自ビルド: U-Boot 2020.01-00473-g88366b96ee (Jan 12 2020 - 16:07:49 +0900) Allwinner Technology
Armbian: U-Boot 2019.10-armbian (Jan 05 2020 - 10:27:36 +0100) Allwinner Technology

https://linux-sunxi.org/U-Boot
にも v2019.10 を使うように書いてあるが、Armbianのバージョンと同じ。

$ git checkout v2019.10
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi- orangepi_r1_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-none-eabi-
でビルドしなおしてみた。

結果、起動した!