初中生
最后登录1970-1-1
在线时间 小时
注册时间2023-11-6
|
鲁班猫添加TFT小屏幕编译内核- 更新源 sudo apt update
- 下载工具 sudo apt install gcc make git bc libssl-dev liblz4-tool device-tree-compiler bison flex u-boot-tools gcc-aarch64-linux-gnu
- 克隆代码 git clone -b stable-4.19-rk356x --depth=1 https://github.com/LubanCat/kernel.git
- cd 进入内核目录 cd ./kernel
- 清除历史编译记录,进行编译
- 清除之前生成的所有文件和配置
make mrproper - 设置环境变量 export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- 主要通过export设置的环境变量只能在当前设置的终端中使用。
- 加载lubancat2_defconfig配置文件,rk356x系列均是该配置文件
make lubancat2_defconfig - 编译内核,指定平台,指定交叉编译工具,使用8线程进行编译,线程可根据电脑性能自行确定
- make -j8
这个 -j8是指启用多少个核心进项编译,自己编译的话视自己电脑的cpu定。
等待一段直接后就编译完成,一般是10-20分钟。
修改设备树- 因为tft屏幕我们作为插件使用,所以我们使用修改设备树插件的设备树文件
,处在 /arch/arm64/boot/dts/rockchip/overlay/中。 - 我们新建一个新的设备树文件,就在当前目录中(/arch/arm64/boot/dts/rockchip/overlay/),我就命名为 rk356x-lubancat-spi3-m1-ili9341.dts
- 将设备树文件添加到当前目录中的makefile中。
- 编写设备树文件/dts-v1/;/plugin/;#include <dt-bindings/gpio/gpio.h>#include <dt-bindings/pinctrl/rockchip.h>/ { compatible = "rockchip,rk3568"; fragment@0 { target = <&spi3>; __overlay__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; // 40PIN引脚只预留SPI3 CS0引脚,如果有多个CS信号,可以使用gpio模拟cs pinctrl-names = "default", "high_speed"; pinctrl-0 = <&spi3m1_cs0 &spi3m1_pins>; pinctrl-1 = <&spi3m1_cs0 &spi3m1_pins_hs>; spi_dev@0 { compatible = "rockchip,spidev"; reg = <0>; //chip select 0:cs0 1:cs1 spi-max-frequency = <24000000>; //spi output clock }; display@0{ compatible = "ilitek,ili9341"; //匹配驱动程序用 reg = <0>; spi-max-frequency = <96000000>;//spi速率 dc-gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;#设置dc引脚 reset-gpios = <&gpio1 RK_PB1 GPIO_ACTIVE_HIGH>;#设置rst引脚 rotation = <0>;//设置屏幕旋转角度 ,不过对我的ili9341好像没啥用 backlight = <&backlight>; //背光 buswidth = <8>; //数据宽度 debug = <0>; //debug级别,数越大,调试等级越高 bgr = <0>;//设置是RGB还是BGR fps = <30>;//帧率 pinctrl-names = "default"; pinctrl-0 = <&spi_lcd_cmd_pin &spi_lcd_reset_pin &spi_lcd_light_pin>;#声明使用的引脚 }; }; }; fragment@1 { target = <&pinctrl>; __overlay__ { spi_lcd { //配置指定引脚的 复用/上下拉/驱动能力 等 spi_lcd_cmd_pin: spi_lcd_cmd_pin { rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up_drv_level_1>; }; spi_lcd_reset_pin: spi_lcd_reset_pin { rockchip,pins = <1 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up_drv_level_1>; }; spi_lcd_light_pin: spi_lcd_light_pin { rockchip,pins = <1 RK_PB2 RK_FUNC_GPIO &pcfg_pull_up_drv_level_1>; }; }; }; }; //关闭其它外部输出 fragment@2 { target = <&route_hdmi>; __overlay__ { status = "disabled"; }; }; fragment@3 { target = <&hdmi_in_vp0>; __overlay__ { status = "disabled"; }; }; fragment@4 { target = <&hdmi_in_vp1>; __overlay__ { status = "disabled"; }; }; fragment@5 { target = <&hdmi>; __overlay__ { status = "disabled"; }; };};
- 至于引脚如何配置,请查阅瑞芯微有关资料。
修改内核,使其支持fbtft- make menuconfig 打开配置界面
- 在 Device Drivers ─> Staging drivers -> Support for small TFT LCD display modules 。
- 在其中选择对应的驱动,按Y选择,按N取消。
- 先保存,在推出
- make -j8 编译
- make bindeb-pkg -j24 生成deb增量安装包。
- 在kernel上一级目录会生成几个deb包。
cjia@DESKTOP-T9MJO61:~/LubanCat$ ls -al ./*.deb-rw-r--r-- 1 cjia cjia 11197288 Nov 9 16:10 ./linux-headers-4.19.232_4.19.232-15_arm64.deb-rw-r--r-- 1 cjia cjia 111315512 Nov 9 16:11 ./linux-image-4.19.232-dbg_4.19.232-15_arm64.deb-rw-r--r-- 1 cjia cjia 17001744 Nov 9 16:10 ./linux-image-4.19.232_4.19.232-15_arm64.deb-rw-r--r-- 1 cjia cjia 1080140 Nov 9 16:10 ./linux-libc-dev_4.19.232-15_arm64.deb- 通过你喜欢的方式传到鲁班猫上。
- sudo opkg -i ./*.deb 安装目录下所有以.deb结尾的deb包。
- 注意安装deb时会覆盖设备树与配置文件,如果做了更改需要再改一次
加载设备树插件- 将内核编译生成的rk356x-lubancat-spi3-m1-overlay.dtbo,通过你喜欢的方式传到鲁班猫的/boot/dtb/overlay中.
- 并修改/boot/uEnv/uEnvLubancat2-V2.txt 添加dtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-ili9341.dtbouname_r=4.19.232size=0x1000000cmdline="earlyprintk console=ttyFIQ0 consoleblank=0 loglevel=7 rootwait rw rootfstype=ext4"enable_uboot_overlays=1#overlay_start#40pindtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-ili9341.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-msata-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-i2c3-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-i2c3-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-i2c5-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm7-ir-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm8-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm9-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm10-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm11-ir-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm12-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm12-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm13-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm13-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm14-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm14-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm15-ir-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-pwm15-ir-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-gpio-cs-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-spi3-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart3-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart3-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart4-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart7-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart8-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-uart9-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-can1-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-can2-m0-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-canfd1-m1-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-canfd2-m0-overlay.dtbo#mini-pcie 5G modules#dtoverlay=/dtb/overlay/rk356x-lubancat-pcie2x1-disabled-overlay.dtbo#display#dtoverlay=/dtb/overlay/rk3568-lubancat-hdmi-disabled-overlay.dtbo#dsi0-vp1#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi0-in-vp1-1080p-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi0-in-vp1-rpi-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi0-in-vp1-7.0-1024x600-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi0-in-vp1-10.1-800x1280-overlay.dtbo#dsi1-vp0#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi1-in-vp0-1080p-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi1-in-vp0-rpi-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi1-in-vp0-7.0-1024x600-overlay.dtbo#dtoverlay=/dtb/overlay/rk3568-lubancat-2-dsi1-in-vp0-10.1-800x1280-overlay.dtbo#cam0(mipi-csi0)#dtoverlay=/dtb/overlay/rk356x-lubancat-csi0-sc132gs-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi0-ov5647-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi0-ov5648-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi0-ov8858-overlay.dtbo#cam1(mipi-csi1)#dtoverlay=/dtb/overlay/rk356x-lubancat-csi1-sc132gs-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi1-ov5647-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi1-ov5648-overlay.dtbo#dtoverlay=/dtb/overlay/rk356x-lubancat-csi1-ov8858-overlay.dtbo#overlay_end
- 之后重启,若一切正常则屏幕会先由白变黑,后会显示终端并输出开机日志。
关闭终端在tft屏上显示板- sudo systemctl mask getty@tty1.service 关闭tty1服务
- 修改uEnv.txt 将cmdline="earlyprintk console=ttyFIQ0 console=tty1 consoleblank=0 loglevel=7 rootwait rw rootfstype=ext4"的console=tty1去掉。
- 重启系统,使用cat /dev/urandom > /dev/fb0进行测试,如果屏幕变为雪花状,则为正常。
使用lvgl在/dev/fb0上。- git clone https://github.com/lvgl/lv_port_linux_frame_buffer.git克隆代码。
- 进入源码目录,更新代码cd lv_port_linux_frame_buffer/git submodule update --init --recursive
- 我使用cmake进行编译mkdir build cd buildcmake ..make
- 修改配置文件
1.修改lv_conf.h
将#define LV_COLOR_DEPTH 32改为#define LV_COLOR_DEPTH 32,因为我们所使用的是rbg565的驱动方式,所以是16位。
2.修改main.c,修改尺寸屏幕disp_drv.hor_res = 320;disp_drv.ver_res = 240; - 之后在build,中进行编译,make -j12./lvgl_fb./lvgl_fb执行程序。
- 我们会发现出现了报错cat@lubancat:~/lv_port_linux_frame_buffer/build$ ./lvgl_fb ioctl(FBIOBLANK): Invalid argumentunable to open evdev interface:: No such file or directory我们要去修改源码,搜索源码cat@lubancat:~/lv_port_linux_frame_buffer$ grep -r "FBIOBLANK"Binary file build/lvgl_fb matchesBinary file build/lib/liblv_drivers.a matchesBinary file build/lv_drivers/CMakeFiles/lv_drivers.dir/display/fbdev.c.o matcheslv_drivers/display/fbdev.c:#define FBIOBLANK FBIO_BLANKlv_drivers/display/fbdev.c: if (ioctl(fbfd, FBIOBLANK, FB_BLANK_UNBLANK) != 0) {lv_drivers/display/fbdev.c: perror("ioctl(FBIOBLANK)");发现在fbdev.c,修改代码,将其注释掉// Make sure that the display is on.//if (ioctl(fbfd, FBIOBLANK, FB_BLANK_UNBLANK) != 0) {// perror("ioctl(FBIOBLANK)");// return;//}再次编译,我们会发现,屏幕正常显示了。
通过FFmpeg在/deb/fb0播放视频- 下载FFmpegsudo apt update sudo apt install ffmpeg
- 下载一个你喜欢的视频到鲁班猫上
- 通过ffmpeg播放视频ffmpeg -re -i imas320.mp4 -vf "transpose=1" -vcodec rawvideo -pix_fmt rgb565 -f fbdev /dev/fb0 -re 循环播放 -i 输入表示 imas320.mp4视频名 -vf "transpose=1"
ffmpeg滤镜,作用旋转视频 -vcodec rawvideo 转码 -pix_fmt rgb565颜色转换为rgb565 -f fbdev /dev/fb0 指定输出设备 - 我们还可以播放声音通过-f alsa default 指定输出音频设备。ffmpeg -re -i imas320.mp4 -vf "transpose=1" -vcodec rawvideo pix_fmt rgb565 -f fbdev /dev/fb0 -f alsa default 这样就可以播放音视频了。
|
|