完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Android版本:5.1
内核版本:3.10.79 要使板子HDMI输出4K,需要修改内核层和Android framework层。 一、内核层修改 在没修改内核前,adb进入shell, cd /sys/class/display/HDMI;cat modes,输出当前显示器支持的显示格式。 即使显示器支持4K显示,这里也不会有4K分辨率(3840x2160)。修改内核层目标是使这里识别出4K分辨率。 内核层只需要修改对应dts即可,修改地方为2处,一是禁用掉VGA,二是修改disp_timings。 进入目录firefly-rk3288_android5.1_git/kernel/arch/arm/boot/dts,该Android系统使用的dts为firefly-rk3288.dts,打开该文件,发现该dts引用了 #include "rk3288.dtsi" #include "lcd-box.dtsi" 两个头文件。 ①禁用掉VGA 在rk3288.dtsi,找到hdmi标签: hdmi: hdmi@ff980000 { compatible = "rockchip,rk3288-hdmi"; reg = <0xff980000 0x20000>; interrupts = pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c5_sda &i2c5_scl &hdmi_cec>; pinctrl-1 = <&i2c5_gpio>; clocks = <&clk_gates16 9>, <&clk_gates5 12>,<&clk_gates5 11>; clock-names = "pclk_hdmi", "hdcp_clk_hdmi","cec_clk_hdmi"; //rockchip,hdmi_video_source = rockchip,hdmi_video_source = rockchip,hdmi_audio_source = <0>; rockchip,hdcp_enable = <0>; rockchip,cec_enable = <0>; status = "disabled"; }; 这里修改rockchip,hdmi_video_source 为DISPLAY_SOURCE_LCDC0;即HDMI的视频源为lcdc0。 【说明】因为dtsi文件可能有其他dts引用,最好不要直接修改dtsi文件,而是应该在设备dts即firefly-rk3288.dts中通过引用的方式对欲修改的项目进行覆盖修改。例如,上面修改可以在firefly-rk3288.dts中添加 &hdmi { rockchip,hdmi_video_source = }; 这里为了方便,就直接修改了dtsi,但是不提倡。 然后修改firefly-rk3288.dts,打开该文件,发现vga相关设备都挂在i2c4下,并且该控制器下没有挂其它设备,直接禁用掉该路I2C控制器省事,修改 status = "disabled"。 &i2c4 { //status = "okay"; status = "disabled"; 。。。下面省略。。。 } 这时候lcdc1已经没用了,直接禁用掉: &lcdc1 { //status = "okay"; status = "disabled"; rockchip,iommu-enabled = <1>; rockchip,prop = }; ②修改disp_timings显示时序 在lcd-box.dtsi中已经定义好了3组timing:timing0、timing1、timing2。它们对应的最大显示分辨率依次增加,当前使用模式通过native-mode指定,在该文件中默认native-mode = <&timing0>。我们不在该dtsi文件中进行修改,而是在firefly-rk3288.dts中覆盖修改。打开firefly-rk3288.dts,找到disp_timings,修改为timing2: &disp_timings { native-mode = <&timing2>; }; 进行完上述修改后,内核层修改完成,这时烧入新的设备树,cd /sys/class/display/HDMI;cat modes: auto 3840x2160p-30 3840x2160p-25 3840x2160p-24 1920x1080p-60 1920x1080p-50 1920x1080p-24 1280x720p-60 1280x720p-50 720x576p-50 720x480p-60 发现4K显示器支持的分辨率都已经有了。 【遇到的坑】我在烧写RK3288设备树的时候,遇到了一个坑,无论怎么烧写resource.img(内包含最新的设备树),新的设备树根本不起作用,甚至擦除掉kernel.img和resource.img所在分区的内容,系统也能照常起来。后来发现内核和设备树都是使用的boot.img里面的,但是通过使用安卓源码里面的mkimage.sh默认生成的boot.img不包含kernel和resource,后来我修改了mkimage.sh,使里面的TARGET=$BOOT_OTA,才生成了包含内核和dtb的boot.img,重新烧写了生成的boot.img才使修改生效。在此记录一下。 二、安卓层修改 因为该安卓硬件抽象层里rockchip对分辨率进行了限制,强制忽略了1080p以上的分辨率,这里取消该限制。 进入hardware/rockchip/hwcomposer目录,修改rk_hwcomposer.cpp文件: 在hotplug_set_config()函数里,找到: } else if(ctxp->dpyAttr[dType].yres > 1080) { 这一行,修改为: } else if(ctxp->dpyAttr[dType].yres > 2160) { 即可
所有上述修改完成后,重现编译安卓系统,生成system.img后,烧写,安卓HDMI就完美支持4K了。 另外:如果感觉4K下字体太小,是因为默认的density 160太小造成的,可以在adb shell下执行 wm density 看下默认density,执行 wm density 320 看下界面就比较合适了;修改/system/build.prop: ro.sf.lcd_density=320 就可以了(编译前修改或者烧写后adb root;adb remount挂载/system可读写后修改也可以)。 =============================================================== Found so far that one can set the persist.sys.framebuffer.main to 3840x2160, this causes android to draw everything in 4k but it does not create a full 4k experience on the output because a bit of code in "hardware/rockchip/hwcomposer/hwcomposer.cpp" which is causing to report a 1080p screen in case the framebuffer is set to 2160p. Worked around this by doing the following change in the SDK:
Also found some statements on needing to disable VOP_Little. Is this needed for android 7 and how do I do this for the android 7 SDK ? 我在build.prop中修改 persist.sys.framebuffer.main=3840x2160@30 就可以了 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1657 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
1961 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
4911 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 12:05 , Processed in 0.686381 second(s), Total 71, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号