荔枝派zero V3s用主线u-boot和主线Linux,为什么只需要在u-boot里面设置LCD参数,而不需要在Linux里面设置?
我在Linux的dts文件里面中死活也没有找到关于LCD的width, height,format等配置参数。
我跟踪驱动代码进去,
drivers/video/fbdev/simple_fb.c
simplefb_probe() 有调用 simplefb_parse_dt() 这个设备树DeviceTree解析函数。
但是实际上设备树并没有这个东东。
感觉很神奇!
离线
不懂,帮顶。
离线
离线
/**
* fdt_setup_simplefb_node - Fill and enable a simplefb node
*
* @fdt: ptr to device tree
* @node: offset of the simplefb node
* @base_address: framebuffer base address
* @width: width in pixels
* @height: height in pixels
* @stride: bytes per line
* @format: pixel format string
*
* Convenience function to fill and enable a simplefb node.
*/
int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
u32 height, u32 stride, const char *format)
{
char name[32];
fdt32_t cells[4];
int i, addrc, sizec, ret;of_bus_default_count_cells(fdt, fdt_parent_offset(fdt, node),
&addrc, &sizec);
i = 0;
if (addrc == 2)
cells[i++] = cpu_to_fdt32(base_address >> 32);
cells[i++] = cpu_to_fdt32(base_address);
if (sizec == 2)
cells[i++] = 0;
cells[i++] = cpu_to_fdt32(height * stride);ret = fdt_setprop(fdt, node, "reg", cells, sizeof(cells[0]) * i);
if (ret < 0)
return ret;snprintf(name, sizeof(name), "framebuffer@%" PRIx64, base_address);
ret = fdt_set_name(fdt, node, name);
if (ret < 0)
return ret;ret = fdt_setprop_u32(fdt, node, "width", width);
if (ret < 0)
return ret;ret = fdt_setprop_u32(fdt, node, "height", height);
if (ret < 0)
return ret;ret = fdt_setprop_u32(fdt, node, "stride", stride);
if (ret < 0)
return ret;ret = fdt_setprop_string(fdt, node, "format", format);
if (ret < 0)
return ret;ret = fdt_setprop_string(fdt, node, "status", "okay");
if (ret < 0)
return ret;return 0;
}
离线
还真是这么回事, 谢谢楼上的大佬解我心头之惑!
相当于和u-boot共享设备树,
参数只需要在 u-boot里面设置一次即可。
离线
这个问题我以前也纳闷过,
后来发现 u-boot的 common/fdt_support.c 里面有 fdt_setup_simplefb_node()这个函数,
他居然会自己创建设备树, 然后传递给Linux用,赶脚好神奇!
晕哥 如何使用de功能 在Linux设备树中更改lcd屏幕的参数 现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码 然后编译镜像之后烧写 以后会有多种屏幕 这样不太方便 最好只修改设备树 在设备树配置参数 只更换设备树即可 这样最好
离线
晕哥 说:这个问题我以前也纳闷过,
后来发现 u-boot的 common/fdt_support.c 里面有 fdt_setup_simplefb_node()这个函数,
他居然会自己创建设备树, 然后传递给Linux用,赶脚好神奇!晕哥 如何使用de功能 在Linux设备树中更改lcd屏幕的参数 现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码 然后编译镜像之后烧写 以后会有多种屏幕 这样不太方便 最好只修改设备树 在设备树配置参数 只更换设备树即可 这样最好
你的de功能正常了吗?
离线
hanzixi_angel 说:晕哥 说:这个问题我以前也纳闷过,
后来发现 u-boot的 common/fdt_support.c 里面有 fdt_setup_simplefb_node()这个函数,
他居然会自己创建设备树, 然后传递给Linux用,赶脚好神奇!晕哥 如何使用de功能 在Linux设备树中更改lcd屏幕的参数 现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码 然后编译镜像之后烧写 以后会有多种屏幕 这样不太方便 最好只修改设备树 在设备树配置参数 只更换设备树即可 这样最好
你的de功能正常了吗?
de功能正常啊 修改了linux/drivers/gpu/drm/panel/panel-simple.c源码 适配了屏幕 但是这样修改不太好 想只修改设备树 在设备树增加屏幕参数
离线
smartcar 说:hanzixi_angel 说:晕哥 如何使用de功能 在Linux设备树中更改lcd屏幕的参数 现在都是更改linux/drivers/gpu/drm/panel/panel-simple.c源码 然后编译镜像之后烧写 以后会有多种屏幕 这样不太方便 最好只修改设备树 在设备树配置参数 只更换设备树即可 这样最好
你的de功能正常了吗?
de功能正常啊 修改了linux/drivers/gpu/drm/panel/panel-simple.c源码 适配了屏幕 但是这样修改不太好 想只修改设备树 在设备树增加屏幕参数
drm的话如果找不到现成的LCD配置估计就一定要修改那部分的代码吧,
离线
U-BOOT 是不是没在FLASH固件包里面呢
离线
我怎么链接电脑看不到荔枝派设备,只是显示 多了一个通用USB集线器呢
离线
大佬,我想咨询下,屏幕尺寸和接口引脚都一样的情况下,如果只改动屏幕驱动,由ST7789改成ILS9341,请问要修改哪几个位置?
离线