2024年10月3日 星期四

Fly-Pi 自定 Armbian

參考

為了要編譯網卡的驅動,必須有預裝的而且使用非官方的 image,不會使用 cn 網域的伺服器,快多了。

Fly 提供的 Armbian image,沒有 kernel source,所以無法使用。

自已 build image

有較多選擇性。步驟如下

要先 git clone https://github.com/reemo3dp/mellowfly-geminipi-armbian,再執行下面的步驟。

# Check out armbian's build repository
$ git clone https://github.com/armbian/build/ armbian
$ cd armbian/
# Apply patches from this repository
$ git am ../mellowfly-geminipi-armbian/patches/*.patch
# Compile ubuntu jammy with default kernel config
$ ./compile.sh BOARD=mellowflygeminipi BRANCH=current RELEASE=jammy BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=no INSTALL_HEADERS=yes

不要只執行 ./compile.sh,透過互動界面選擇選項,那樣的選項較少。

建立 debian / legacy 的 image。

----------------
./compile.sh BOARD=mellowflygeminipi BRANCH=legacy RELEASE=bookworm BUILD_MINIMAL=no BUILD_DESKTOP=no KERNEL_CONFIGURE=no INSTALL_HEADERS=yes KERNEL_BTF=no
----------------

建好了,但無法開機。

還是不要這麼麻煩自己建,git 是有建好的 image,下載來用就好。

步驟

下載 image,燒到 sd 卡。

接上 Type-C 接口,再使用 putty 連線。baud rate 115200。

用 root 登入,密碼 cc1234,登入後,會要求改密碼。然後,立刻要建一個普通帳號,例如 klipper / cc1234。

較特殊的網路設定,如要指定固定 IP,可以使用 nmtui 來設定。

記得,一定要執行 armbian-config ,Disable updating kernel,然後再執行 apt update。不然,更新後,可能無法開機。

以 root 身分執行 armbian-add-overlay <overlay_file.dts>,藉以 Compile and activate the overlay , 例如 sudo armbian-add-overlay sht15.dts。

---------------------
$ ls /lib/modules/6.6.36-current-sunxi64/kernel/drivers/staging/fbtft/fb_ili*
fb_ili9163.ko  fb_ili9325.ko  fb_ili9341.ko  fb_ili9486.ko
fb_ili9320.ko  fb_ili9340.ko  fb_ili9481.ko
---------------------

可惜沒有 fb_ili9488.ko。

連接 LCD 測試

反組譯它的 dtbo,確認 FPC 連線的接腳後,設定 dts 如下。

$ cat /boot/overlay-user/ili9341_lcd.dts
/dts-v1/;
/plugin/;

/ {
    compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";

    fragment@0 {
        target = <&spi1>;
        __overlay__ {
            status = "okay";
            cs-gpios = <&pio 0 13 0>; /* PA13*/
            // cs-gpios = <&pio 0 10 0>, <&pio 0 20 0>; /* PA10 PA20 */

            ili9341: ili9341@0 {
                compatible = "ilitek,ili9341";
                reg = <0>;  /* Chip Select 0 */
		#spi-cs-high;
                spi-max-frequency = <40000000>;
                rotate = <90>;
                bgr = <0>;
                fps = <30>;
		width = <240>;
		height = <320>;
                buswidth = <8>;
                reset-gpios = <&pio 6 6 1>; /*RESET=PG6*/
                dc-gpios = <&pio 6 7 0>; /*DC_RS=PG7*/
                led-gpios = <&pio 0 0 0>; /*LED=PA0*/
                debug = <4>;
            };
        };
    };
};

先用 ili9341 的驅動測試。


它把 LED 直接 enable,因此不能控制亮度,LCD 也會有點燙。可以顯示畫面,只是解析度不對。這表示可以用 16 位元的格式,用 656 儲存 RGB 資料。

依據官方文件,它使用 ST7796 控制晶片。

直接把 fb_ili9341.c 拿來線譯成 external module,Makefile 如下。
$ cat Makefile 
CONFIG_LOCALVERSION="-tegra"
EXTRAVERSION= -test
CDIR=/lib/modules/`uname -r`/build
#KDIR=/usr/src/linux-headers-6.6.36-current-sunxi64
MODULE_NAME := fb_ili9341n
MODDESTDIR=/lib/modules/`uname -r`/kernel/drivers/staging/fbtft/
KVER=`uname -r`

#@echo $(KERNELVERSION)

obj-m := fb_ili9341n.o

modules:	
	@echo $(KERNELVERSION)
	make -C ${CDIR}   M=${PWD}

install:
	install -p -m 644 $(MODULE_NAME).ko  $(MODDESTDIR)
	/sbin/depmod -a ${KVER}

clean:
	rm -f *.mod* *.o *.ko modules.order  Module.symvers

為了區別,只改名成 fb_ili9341n。

結果是不成功,載入 module 時會出現 "Unable to handle kernel paging request at ... " 的錯誤。沒辦法,官方沒有主動支援自己編譯的 image。


overlay 設定,可參考 FLY-TFT/rpi-overlays/fly-tft-v2.dts





沒有留言:

張貼留言

網誌存檔