页次: 1
CONFIG_FB_PRE_INIT_FB
https://www.denx.de/wiki/DULG/LinuxSplashScreen
合集方便转存:
链接: https://pan.baidu.com/s/1kxn527BPCmAoYu8apNxHaA 提取码: bx91
一个特定的版本不一定适合于所有人,总有人会遇到坑,所以其实多看看置顶帖里面的踩坑记录才是更好的方式。
比如我自用的版本:
https://github.com/summershrimp/opendeck-linux(国内镜像https://gitee.com/xm1994/linux-f1c100s )
在里面添加了
0. 修复了icenowy nano-4.14-exp分支的usb故障问题
1. 来自于openwrt的mtdsplit功能
2. GT911 800x480触摸配置
3. 修改了lichee的设备树,添加了i2c/backlight等节点
4. 修改了USB gadget HID与ep size有关的变量,支持report size > ep max size
我的需求是做一个通过usb hid通讯的触控面板,还能支持重置,因此才有了上面这些提交。
但是这些东西并不一定每个人都需要,对不需要的人来说反而造成了负担。
最好的办法还是有能力自己填坑。
找到树莓派的开机自动修复ext4 https://raspberrypi.stackexchange.com/questions/61723/raspberry-pi-3-and-raspbian-jessie-how-to-run-fsck-at-boot
但是有一个问题, 根文件系统都挂载不上, 怎么调用命令修复了, 又是一个鸡生蛋,蛋生鸡的问题了。
initramfs了解下
USE_EVDEV我已经设置过了,就是触控无效我才去找置顶的帖子,那里有说"littlegv :在官方的framebuffer demo基础上添加了libinput设备的初始化,就可以用触屏了。",我也不确定呢,在试!
qter 说:也可以用 USE_EVDEV=1 吧, libinput 是不是把 ev又封装了一遍?
用evdev就可以,可以看我项目里的这个提交
https://github.com/summershrimp/opendeck-gui/commit/f16c256390c36c5360f5efb919942c9960aef1eb
mango 说:15楼图有问题,兼容性不够。
FP6xxxx系列,可以这样用。
如果是GT系列,RST必须是IO口,由于存在两组IIC通讯地址,上电需要靠这RST和INT两条线的时序确定。https://whycan.cn/files/members/1597/2019-08-17_112407.png
怪不得, 还以为我的 GT911 触摸屏 精神分裂了,
i2c_detect 检测, 有时候启动是 0x14, 有时候是 0x5d,然后再看 @xm1994 的 dts 代码,
https://github.com/summershrimp/opendeck-linux/commit/eb7a274d02b52a02198e3b2726df822eed0f36c8发现 rst 引脚也接上了
linux的goodix驱动好像不包括上电时序部分的控制(也可能是我没找到),因此我把两个地址都用了,总有一个能初始化成功。
如果你下载过以前Icenowy的f1c100s-480272lcd-test那个分支,直接把patch上的修改自己添加过去就好。
如果没下过的话 建议科学上网后再下载。
前文:
终于搞好了荔枝派nano linux uboot瘦身 + usb gadget hid + gt911触控 + littlevgl demo
相关的配置文件,编译好的二进制都可以在楼层中找到。
0x01: 开机卡在waiting for rootfs
原因有两点
1. 找不到SPI flash
f1c100s应使用A31的spi控制器驱动,但lichee官方config中是启用的A10 SoC的驱动。
表现为开机ttl日志中没有dts中的spiflash 分区信息打印,且卡在waiting for rootfs
启用:Device Driver ---> SPI Support ---> Allwinner A31 SPI controller
禁用:Device Driver ---> SPI Support ---> Allwinner A10 SoCs SPI controller
2. 未开启mtdblock
lichee官方的u-boot 中 kernel cmdline 使用jffs2格式的mtdblock3作为rootfs,但config中没有打开mtdblock设备接口。
表现为开机ttl日志中有dts中的spiflash 分区信息打印,但仍然卡在waiting for rootfs
启用:Memory Technology Device (MTD) support ---> Caching block device access to MTD devices
0x02: 无法挂载jffs2分区
lichee 官方配置文件没有打开jffs2的文件系统支持。
启用: File systems ---> Miscellaneous filesystems ---> Journalling Flash File System v2 (JFFS2) support
这里推荐把squashfs4.0也一并打开,后面会开一帖讲下如何添加更新固件和恢复默认设置的功能。
0x03: 开机后报大量JFFS2 erase size错误
这个lichee官方和论坛里很多人的帖子都有提到,修复方法是patch掉内核里对应flash型号的SECT_4K参数。但是实际上内核配置文件中为我们预留了关闭4K erase size 的选项,无需侵入内核代码修改。
禁用:Memory Technology Device (MTD) support ---> SPI-NOR device support ---> Use small 4096 B erase sectors
这样以后更换其他的flash芯片也无需重新修改内核。
0x04: 运行framebuffer gui程序后,右上角有闪烁的光标
论坛里有修改bootargs的办法:
https://whycan.cn/t_543.html
https://whycan.cn/t_1953.html#p12829
搜索引擎里搜到的基本都说要patch代码
但我个人认为两种方法都不是根本办法,其实config中有可以关闭framebuffer 作为console的选项。
修改方法
禁用:Device Driver ---> Graphics support ---> Console display driver support ---> Framebuffer Console support
但这个选项默认无法修改。仔细查看相关的Kconfig文件后,发现这个选项只有启用了专家模式(Expert Mode),且没有其他依赖选项时才可以关闭。
启用专家模式:General setup ---> Configure standard kernel features (expert users) 但不要修改里面的选项
然后就可以禁用:Device Driver ---> Graphics support ---> Console display driver support ---> Framebuffer Console support
这样你的显示器在framebuffer初始化完了就会变成黑色,运行gui程序后也不会有闪烁的光标了。
更新:
uboot, linux, buildroot 的配置文件
buildroot 用的2019.04
configs.tgz
编译好的二进制:
0x0 u-boot
0x40000 dtb
0x50000 kernel
0x510000 rootfs
nano-spi-touchscreenok.tgz
rootfs_jffs2.tgz
u-boot 和 kernel中不含splash image,因此开机会黑屏。
rootfs中有编译的littlegv demo程序,开机会自动运行(约10s),可以用lichee nano官方套装的电容屏实现触控。
怎么无法编辑了。。
littlevgl 触屏适配:
https://github.com/summershrimp/opendeck-gui/commit/f4261556206038160f9b85e6c911c020eb0727dd
linux 4.14 Icenowy内核 patch:
https://github.com/summershrimp/opendeck-linux/commit/eb7a274d02b52a02198e3b2726df822eed0f36c8
发个贴纪念下,仅供参考。
usb gadget参考帖:
https://whycan.cn/t_1672.html#p14652
花了一点时间对Icenowy的patch和chong的patch进行了比较,结果发现chong的patch包基本上就是在Icenowy的基础上更改了下面的这个文件:
--- ../linux/drivers/clk/sunxi-ng/ccu-suniv.c 2019-01-15 22:48:18.824587965 +0800
+++ drivers/clk/sunxi-ng/ccu-suniv.c 2019-01-23 09:05:17.959348454 +0800
@@ -238,7 +238,7 @@
/* The BSP header file has a CIR_CFG, but no mod clock uses this definition */static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M",
- 0x0cc, BIT(8), 0);
+ 0x0cc, BIT(1), 0);static SUNXI_CCU_GATE(dram_ve_clk, "dram-ve", "pll-ddr",
0x100, BIT(0), 0);理论上将上面这个patch应用到Icenowy的4.14内核中,USB应该也就能跑了。
Icenowy 的 f1c100s 分支是linux 4.15-next, uboot直接引导时musb部分会报错,原因未知。fel usb加载uboot没问题。
f1c100s-480272lcd-test 分支修改后可正常冷机启动, usb gadget也是可以驱动的。
gt911触控参考帖
https://whycan.cn/t_2482.html#p19396
注意到原理图中 电容屏中断口连接的是PE3?
https://whycan.cn/files/members/735/ts_i2c.jpg
而且实际复位端口也是直接用了RC,即图中1口,实际dts并没有配置到gt911的中断端口以及复位端口?
尝试如下修改,不过好像没什么用处:
gt911:touchscreen@14{ compatible = "goodix,gt911"; reg = <0x14>; interrupt-parent = <&pio>; interrupts = <4 3 IRQ_TYPE_EDGE_FALLING>;/*(PE3)*/ pinctrl-names = "default"; pinctrl-0 = <&ts_reset_pin>; irq-gpios = <&pio 4 3 GPIO_ACTIVE_HIGH>;/*(PE3)*/ reset-gpios = <&pio 4 9 GPIO_ACTIVE_HIGH>; /*RST (PE9)*/ /*touchscreen-swapped-x-y*/ };
还想请问一下,如果中断配置成功的话,是不是/dev/下就会有input文件夹,因为现在板上一直是没有这个文件夹
gt911根据reset pin和interrupt pin拉高的顺序决定使用i2c地址0x14或0x5d, 但似乎linux的goodix驱动尚未支持设置两个时序,导致在调试时地址会变化,从而无法驱动。可通过在dts中添加两个不同地址的gt911来解决,总有一个能驱动成功。
还要根据官方的说明,在goodix.c里面加载一个二进制的配置表。
UBoot瘦身 :
https://github.com/summershrimp/u-boot-lichee/commit/ce09ef150a2f08729ed7efa3be38c35918cbedf4
Icenowy 的 U-Boot 很多地方没有使用宏来控制功能的可用性。在这里我修改了一下,可以正常的裁剪掉网络/分区表/EFI/USB/nvram等相关功能,可以缩减到128k左右,留出更多的空间给内核和文件系统。
瘦身最关键的是调整NVRAM的储存位置。
littlegv :在官方的framebuffer demo基础上添加了libinput设备的初始化,就可以用触屏了。
目前终于USBHID可以双向通讯了,触屏显示和触摸也完美,可以开始写业务程序了TAT
稍后补上各种patch和config
以下是楼主 2019-07-22 8# patch & config 更新:
----------------------------------------------------------
littlevgl 触屏适配:
https://github.com/summershrimp/opendeck-gui/commit/f4261556206038160f9b85e6c911c020eb0727dd
linux 4.14 Icenowy内核 patch:
https://github.com/summershrimp/opendeck-linux/commit/eb7a274d02b52a02198e3b2726df822eed0f36c8
以下是楼主 2019-07-25 16# 更新:
----------------------------------------------------------
uboot, linux, buildroot 的配置文件
buildroot 用的2019.04
configs.tgz
编译好的二进制:
0x0 u-boot
0x40000 dtb
0x50000 kernel
0x510000 rootfs
nano-spi-touchscreenok.tgz
rootfs_jffs2.tgz
u-boot 和 kernel中不含splash image,因此开机会黑屏。
rootfs中有编译的littlegv demo程序,开机会自动运行(约10s),可以用lichee nano官方套装的电容屏实现触控。
uboot: go 0xffff0020
Through serial console
If you have access to the UART already, you can send the character '1' ('2' on some devices) to the device during power-up.Boot1 is initialized using this method.
With later SoCs, Allwinner's U-boot supports the "efex" command.
If "efex" is not available in your U-boot, you can use the simple uboot "go" command with arguments pointing to the return FEL address:
http://linux-sunxi.org/BROM#Other_booting_methods
=> go 0xffff0020
Starting application at 0xFFFF0020 ...
页次: 1