【f1c200s笔记七】u-boot开机logo

一、开启u-boot显示功能

1、首先要说明的是,博主的LCD屏是裸屏,不需要对屏幕进行初始化,即可直接使用。所以下面的步骤是省略了显示屏初始化部分。

2、类比kernel开启显示功能,推测实现u-boot开启显示功能大概也是三个方面,第一配置设备树,第二是在菜单中打开驱动,第三是应用层调用。

2、事实也确是如此,但也并不完全如此。可能是因为博主的u-boot是LicheePi nano的版本,芯片有关于panel外设的部分(应该包括寄存器部分)已经在源码中固定写好了,亦或者panel本身是通用的外设接口,不需要再配置设备树,所以对于第一步的设备树不再需要配置。

3、接下来就是在菜单中打开驱动了。进入/usr/local/f1c200s/u-boot/u-boot路径下,执行make menuconfig,然后使能如下选项以开启u-boot的LCD panel驱动。

ARM architecture > Enable graphical uboot console on HDMI, LCD or VGA

4、当然,LCD panel虽然是通用接口,但是并不能自动检测屏幕大小,以及屏幕前后门廊等一些参数的。所以我们还需要配置LCD panel timing details选项,下面是博主的屏幕参数。
x:800,y:480,depth:18,pclk_khz:33000,le:16,ri:209,up:22,lo:22,hs:30,vs:1,sync:0,vmode:0
x y:这个自然就是屏幕的像素啦。
depth:屏幕的颜色深度,比如RGB888就是32,RGB666是18,具体是看屏幕硬件的接法。
pclk_khz:数据传输的时钟频率,要根据屏幕参数确定,不是越快越好,不然显示会失真或者有雪花的。
le:显示屏前廊,从行同步信号到图像左边沿的像素时钟数。
ri:显示屏后廊,从行同步到图像右边沿的像素时钟数,(可以结合上一条,理解为行同步信号是插入到两组行数据中间)。
up:从场同步到图像上边沿的行数,场信号可以理解为一张图片的起始信号。
lo:从场同步到图像下边沿的行数。
hs:行同步时间长度(像素时钟数)。
vs:场同步时间长度(行数)。
sync、vmode:这两个参数的配置,可以从文件include/uapi/linux/fb.h的211~229行找到一些蛛丝马迹,大概是控制视频刷新的一些参数。

5、要配置lcd,自然不能少了背光,接下来修改配置“() LCD panel backlight enable pin”的值为PE6,用以使能背光引脚。

配置完成后的界面

6、这个时候,背光引脚尚没有配置完成。因为要配置设备树。gpio默认开始dm模式(driver model),gpio驱动需要寻找对应的设备,才能执行对应的驱动。具体可以参考https://www.freesion.com/article/368464004/

于是乎,在文件/usr/local/f1c200s/kernel/linux-5.7.1/arch/arm/boot/dts/suniv-f1c100s.dtsi内的根节点下,添加gpio的设备节点。

	pinctrl: pinctrl@1c20800 {
		compatible = "allwinner,sun4i-a10-pinctrl";
		reg = <0x01c20800 0x2c4>;
		#address-cells = <1>;
		#size-cells = <1>;
		pa: pa {
			gpio-controller;
			#gpio-cells = <2>;
		}; 
		
		pb: pb {
			gpio-controller;
			#gpio-cells = <2>;
		};
		
		pc: pc {
			gpio-controller;
			#gpio-cells = <2>;
		};
		
		pd: pd {
			gpio-controller;
			#gpio-cells = <2>;
		};
		
		pe: pe {
			gpio-controller;
			#gpio-cells = <2>;
		};
		
		pf: pf {
			gpio-controller;
			#gpio-cells = <2>;
		};
	};

7、修改完上述,再将bin文件烧录到tf内,上电,就能看到开机的logo啦。什么,第三步应用层调用还没有配置,那是因为u-boot默认就开启了logo显示的功能。

二、修改开机logo

1、默认的开机logo,怎么能显示出我们设配的特色呢,立刻马上就更换。既然原本有开机logo,那是不是只要把它换成我们自己的图片就可以了,那当然是的。

2、首先呢,需要准备一张bmp图片,颜色深度为8位,切记不能太大了,不然就会超出u-boot的尺寸。博主默默拿出了珍藏的病娇。

如果凑巧电脑没有安装ps,可以使用Ubuntu上的方法

//首先安装对应的工具
sudo apt-get install netpbm
//然后将jpg转换为bmp图片,$1是源文件名,$2是输出文件名
jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2

3、将制作好的BMP图片,放置到/usr/local/f1c200s/u-boot/u-boot/tools/logos路径下面。然后还不够,还需要修改相关文件使之和源码相关联。

打开文件/usr/local/f1c200s/u-boot/u-boot/tools/Makefile,修改223行的LOGO_BMP,使其指向自己的bmp图片。

4、这样,开机logo就修改成我们自己的图片了,但是目前还不能正常使用。因为它只是图片,还需要转化成数组,编译进我们的可执行bin文件内,才能被执行。

好在这一步已经被u-boot做掉了,我们只需要在 uboot/include/configs/suniv.h 中加入两个宏定义即可。

#define CONFIG_VIDEO_LOGO
#define CONFIG_VIDEO_BMP_LOGO

5、当然不要忘了先执行make clean,然后执行make,最后烧录。可以看到u-boot开机logo已经变成了我们自定义的图片,只不过8位图片显示失真严重。

6、图片居然不是居中的,而且还打印了一些版本信息。对于强迫症来说,心里面痒痒的。打开文件drivers/video/cfb_console.c

屏蔽掉版本信息打印
图片居中

嗯~,舒服多了。

三、u-boot过度到kernel时的花屏问题

1、首先要感谢这位博主的分享https://whycan.com/t_3792.html

2、从u-boot过度到kernel的时候,会出现一秒钟的花屏。是因为u-boot驱动屏幕显示的那片内存,在过度到kernel的时候,被初始化掉了,才导致显示的异常。又因为这片内存区域是在最后面,所以我们可以通过限制kernel的内存大小,避免这片区域被初始化,从而解决这个问题。

3、操作方式就是,执行make menuconfig,在uboot菜单中的bootargs项目(Boot arguments),添加mem=62M,记得加空格。

四、关闭autoboot倒计时

1、关闭u-boot跳转autoboot倒计时是比较简单的,只需要在配置菜单内,将(0) delay in seconds before automatically booting设置为零即可。

2、但是需要注意的是,运行过u-boot的tf卡,会保存环境变量,所以修改上述配置后,还需要在u-boot重置一下环境变量。具体操作是,在倒计时过程中按任意键进入命令行。

//重置环境变量
env default -a
//查看环境变量,对应bootdelay=0
print
//保存变更
saveenv

改变autoboot为零后,若想进入命令模式,只需要在开机的时候狂按任意按键,就可以进入命令行。

五、删除kernel的logo和光标

1、在启动kernel的时候,我们会看到屏幕又跳出了内核的开机logo。不过此时,我们只需要在内核菜单的Device Drivers > Graphics support > Bootup logo位置,就可以轻易关闭它了。

2、现在我们的设备,从开机logo到运行lvgl的demo程序,跳转终于正常了,但是在运行demo的时候,输入光标一直在哪里一闪一闪的,影响界面的显示效果。要想关闭他们,可以打开文件drivers/video/fbdev/core/fbcon.c,将如下这两个函数的内容屏蔽掉,就不会有光标跳出来影响观感了。

388:static void fb_flashcursor(struct work_struct *work)

1384:static void fbcon_cursor(struct vc_data *vc, int mode)

博客内容均系原创,未经允许严禁转载!

评论

  1. zkh
    1 年前
    2023-7-24 9:42:46

    催更USB网络|´・ω・)ノ

    • 春风催雪
      zkh
      1 年前
      2023-7-25 17:42:55

      安排୧(๑•̀⌄•́๑)૭

      • zkh
        春风催雪
        1 年前
        2023-7-27 21:18:08

        我调试通了,成功挂载了nfs,可以和ubuntu传文件了ヾ(≧∇≦*)ゝ

        • 博主
          zkh
          1 年前
          2023-7-27 21:48:53

          厉害了^o^

  2. zkh
    1 年前
    2023-7-24 8:16:49

    催更崔更

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇