在开机的时候首先进行板级的初始化(U-boot/arch/arm/lib/board.c),现在flash中跑board_init_f(),划分一部分Mermory用来跑U-BOOT,划定范围之外的Mermory在U-boot的时候是不能被操作的。同时预留给malloc() arena、U-Boot code, data & bss、VFD display、LCDdisplay、TLB table、PRam、logBuffer等空间。
接下来走到RAM中的board_init_r(),建立片选、初始化串口、初始化NAND、MMC、flash,然后到do_cboot(NULL, 0, 1, NULL); // 进入启动函数,接着调用
- board_boot_mode_regist(boot_mode_array)
- 然后到boot_mode_array 选择模式,启动进入正常的模式:uis7862s_1h10_normal_mode();
- vlx_nand_boot
- drv_lcd_init?对lcd进行一个常规的初始化
- ?lcd_init?调用 lcd_ctrl_init 来完成lcd的初始化,另一方面通过lcd_clear()来完成控制输出的backcolor和frontcolor,并且将LOGO解压并放入Buffer
- ?lcd_ctrl_init 初始化lcd
- sprdfb_probe 提供LCD具体驱动的入口
- sprd_panel_probe 以数组的形式轮询每款屏read_id的值,也就是读取MIPI屏寄存器里的id值,读取成功返回0,也就是找到该款屏幕驱动,然后初始化,没找到就继续轮询,直到找到或者最后没找到会设置一个默认加载屏幕的驱动。
- lcd_splash(LOGO_PART) 刷logo
- set_backlight(backlight_set) 亮背光
uboot移植:
kernel移植比较简单
-
arch/arm64/boot/dts/sprd/lcd/目录下复制之前的dtsi屏驱动 -
修改名称lcd_xxx_mipi_fhd,把uboot的proch、分辨率、pixel_clk、phy_freq、初始化命令修改到当前的dtsi文件 -
这个驱动的dtsi就像 .h文件一样,将文件名加到改平台的dtsi文件中去。
移植结束后,看是否点亮该屏。如果屏幕没有亮,请检查:
|