下载室内设计排版模板网站有哪些,想学电商去哪学,网站是怎么建成的,汽车之家网站做的很烂一、背景、目的、简介。
一般来说#xff0c;通过uboot将屏幕参数传给kernel#xff0c;是通过修改设备树。
uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。
在这里#xff0c;我先是找到了一个裸机点屏的代码。将其编译成静态库后#x…一、背景、目的、简介。
一般来说通过uboot将屏幕参数传给kernel是通过修改设备树。
uboot和kernel都需要屏幕点亮。uboot侧重于显示一张图片。而kernel则多是动画。
在这里我先是找到了一个裸机点屏的代码。将其编译成静态库后给uboot来调用。而不是通过荔枝派已经适配好了的uboot。
这样做只需要将uboot初始化好了的内存地址传给内核就好了当然还包括屏幕大小等信息因为已经提前知道所以在内核中写死了。然后利于simple-framebuffer将内容映射为屏幕。然后有了fb0就可以骚操作了。
二、问题
但是在实际操作过程中遇到了些问题。比如说将内存地址传给kernel后内核需要将该物理地址转为虚拟地址。使用ioremap后不能功会出错但还是会显示注册framebuffer成功。
以及成功后有显示fb0但是屏幕上有条纹明显不是fb所指内存中的内容。如果正常的话uboot已经配置了tcontcon将fb里面的数据先经过了de和mixer处理自动发送到屏幕上。应该看到random的内容这内容应该是.text或是全黑屏。但是实际上是uboot显示的内容会慢慢消失。猜测是tcon被关闭了。
三、解决
为什么uboot传参后的屏幕显示正常呢为什么我修改simplefb_probe后kernel起动时报错下面的内容全部在/drivers/video/fbdev/simplefb.c中进行。
其实需要修改的不是simplefb_probe这个函数而是simplefb_parse_dt这个函数。
99行 simplefb_parse_dt修改为
static int simplefb_parse_dt(struct platform_device *pdev,struct simplefb_params *params)
{struct device_node *np pdev-dev.of_node;int ret;const char *format;int i;//ret of_property_read_u32(np, width, params-width);ret 0;params-width 800;if (ret) {dev_err(pdev-dev, Cant parse width property\n);return ret;}//ret of_property_read_u32(np, height, params-height);ret 0;params-height 480;if (ret) {dev_err(pdev-dev, Cant parse height property\n);return ret;}//ret of_property_read_u32(np, stride, params-stride);ret 0;params-stride 3200;if (ret) {dev_err(pdev-dev, Cant parse stride property\n);return ret;}//ret of_property_read_string(np, format, format);ret 0;if (ret) {dev_err(pdev-dev, Cant parse format property\n);return ret;}params-format NULL;for (i 0; i ARRAY_SIZE(simplefb_formats); i) {//if (strcmp(format, simplefb_formats[i].name))if (strcmp(x8r8g8b8, simplefb_formats[i].name))continue;params-format simplefb_formats[i];break;}if (!params-format) {dev_err(pdev-dev, Invalid format value\n);return -EINVAL;}return 0;
} 还需要修改设备树
通过网盘分享的文件v3s_mini_dts.tar 链接: https://pan.baidu.com/s/1gJZEUVp4DVJMtSWjHNpzpA?pwdwqvc 提取码: wqvc --来自百度网盘超级会员v3的分享
/{panel: panel {#address-cells 1;#size-cells 0;compatible urt,umsh-8596md-t, simple-panel;port0 {reg 0;//backlight backlight;#address-cells 1;#size-cells 0;panel_input: endpoint0 {reg 0;remote-endpoint tcon0_out_lcd;};};};
}tcon0_out {tcon0_out_lcd: endpoint0 {reg 0;remote-endpoint panel_input;};
};chosen {#address-cells 1;#size-cells 1;ranges;simplefb_lcd: framebuffer0 {compatible allwinner,simple-framebuffer,simple-framebuffer;allwinner,pipeline de0-lcd0;clocks ccu CLK_BUS_TCON0, display_clocks 0,display_clocks 6, ccu CLK_TCON0;status disabled;};}; 四、其它问题
还遇到过什么问题吧比如使用mplayer播放视频但是只显示第一帧然后报错说无法得到第2个缓存。这个问题是只使用了 compatible urt,umsh-8596md-t, simple-panel;这是一个drm但是simple-framebuffer没有配置好不能用导致。将simple-framebuffer配置好就可以了。 五、uboot传参对kernel设备树还是有影响的
比如我将fdt_simplefb里的设置修改本来显示设备是在chosen里的但是被我改成了在/节点下。 那么问题又来了framebuffer的地址也是uboot传入的修改其值会有影响吗
经过测试其它数值没有什么变化。 六、实物实拍
好想做个小电视呀微缩模型放城堡里..._哔哩哔哩_bilibili