[RK3288][Android6.0] 除錯筆記 --- 移除uboot和kernel開機logo
OS: Android 6.0
Kernel: 3.10.92
diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dts
index ad3bc1a..f000e29 100644
--- a/arch/arm/boot/dts/rk3288-b.dts
+++ b/arch/arm/boot/dts/rk3288-b.dts
@@ -353,7 +353,7 @@
&fb {
rockchip,disp-mode = <NO_DUAL>;
- rockchip,uboot-logo-on = <1>;
+ rockchip,uboot-logo-on = <0>;
};
在移除了uboot logo之後還是會顯示kernel logo(kerne自帶而並非rk顯示logo機制),所有需要關閉.
diff --git a/arch/arm/configs/rockchip_b_defconfig b/arch/arm/configs/rockchip_b_defconfig
index 092dc3c..b699f96 100644
--- a/arch/arm/configs/rockchip_b_defconfig
+++ b/arch/arm/configs/rockchip_b_defconfig
@@ -439,7 +439,7 @@ CONFIG_RK1000_TVOUT_CVBS=y
CONFIG_RK3036_TV_ENCODER=y
CONFIG_ROCKCHIP_RGA=y
CONFIG_ROCKCHIP_RGA2=y
-CONFIG_LOGO=y
+#CONFIG_LOGO=y
CONFIG_SOUND=y
CONFIG_SND=y
# CONFIG_SND_SUPPORT_OLD_API is not set
uboot logo顯示可參考:
http://blog.csdn.net/kris_fei/article/details/52584903
kernel logo是根據是否開啟了uboot logo display來決定是否要顯示的,在函式rk_fb_register()中,
並且kernel logo的圖片大小要和uboot一直,否則就無法顯示。
#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) if (dev_drv->prop == PRMRY) { u16 xact, yact; int format; u32 dsp_addr; struct fb_info *main_fbi = rk_fb->fb[0]; main_fbi->fbops->fb_open(main_fbi, 1); main_fbi->var.pixclock = dev_drv->pixclock; if (dev_drv->iommu_enabled) { if (dev_drv->mmu_dev) rockchip_iovmm_set_fault_handler(dev_drv->dev, rk_fb_sysmmu_fault_handler); } rk_fb_alloc_buffer(main_fbi); /* only alloc memory for main fb */ dev_drv->uboot_logo = support_uboot_display(); //是否支援uboot logo display if (dev_drv->uboot_logo && uboot_logo_offset && uboot_logo_base) { int width, height, bits, xvir; phys_addr_t start = uboot_logo_base + uboot_logo_offset; unsigned int size = uboot_logo_size - uboot_logo_offset; unsigned int nr_pages; int ymirror = 0; struct page **pages; char *vaddr; int i = 0; if (dev_drv->ops->get_dspbuf_info) dev_drv->ops->get_dspbuf_info(dev_drv, &xact, &yact, &format, &dsp_addr, &ymirror); nr_pages = size >> PAGE_SHIFT; pages = kzalloc(sizeof(struct page) * nr_pages, GFP_KERNEL); while (i < nr_pages) { pages[i] = phys_to_page(start); start += PAGE_SIZE; i++; } vaddr = vmap(pages, nr_pages, VM_MAP, pgprot_writecombine(PAGE_KERNEL)); if (!vaddr) { pr_err("failed to vmap phy addr 0x%lx\n", (long)(uboot_logo_base + uboot_logo_offset)); return -1; } //bmp圖片解壓 if (bmpdecoder(vaddr, main_fbi->screen_base, &width, &height, &bits)) { kfree(pages); vunmap(vaddr); return 0; } kfree(pages); vunmap(vaddr); if (dev_drv->uboot_logo && (width != xact || height != yact)) { pr_err("can't support uboot kernel logo use different size [%dx%d] != [%dx%d]\n", xact, yact, width, height); return 0; } xvir = ALIGN(width * bits, 1 << 5) >> 5; ymirror = 0; local_irq_save(flags); if (dev_drv->ops->wait_frame_start) dev_drv->ops->wait_frame_start(dev_drv, 0); if (dev_drv->ops->post_dspbuf) { dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start, rk_fb_data_fmt(0, bits), width, height, xvir, ymirror); } if (dev_drv->iommu_enabled) { rk_fb_poll_wait_frame_complete(); if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } local_irq_restore(flags); return 0; } else if (dev_drv->uboot_logo && uboot_logo_base) { u32 start = uboot_logo_base; int logo_len, i = 0; int y_mirror = 0; unsigned int nr_pages; struct page **pages; char *vaddr; int align = 0, xvir; dev_drv->ops->get_dspbuf_info(dev_drv, &xact, &yact, &format, &start, &y_mirror); logo_len = rk_fb_pixel_width(format) * xact * yact >> 3; if (logo_len > uboot_logo_size || logo_len > main_fbi->fix.smem_len) { pr_err("logo size > uboot reserve buffer size\n"); return -1; } if (y_mirror) start -= logo_len; align = start % PAGE_SIZE; start -= align; nr_pages = PAGE_ALIGN(logo_len + align) >> PAGE_SHIFT; pages = kzalloc(sizeof(struct page) * nr_pages, GFP_KERNEL); while (i < nr_pages) { pages[i] = phys_to_page(start); start += PAGE_SIZE; i++; } vaddr = vmap(pages, nr_pages, VM_MAP, pgprot_writecombine(PAGE_KERNEL)); if (!vaddr) { pr_err("failed to vmap phy addr 0x%x\n", start); return -1; } memcpy(main_fbi->screen_base, vaddr + align, logo_len); kfree(pages); vunmap(vaddr); xvir = ALIGN(xact * rk_fb_pixel_width(format), 1 << 5) >> 5; local_irq_save(flags); if (dev_drv->ops->wait_frame_start) dev_drv->ops->wait_frame_start(dev_drv, 0); dev_drv->ops->post_dspbuf(dev_drv, main_fbi->fix.smem_start + (y_mirror ? logo_len : 0), format, xact, yact, xvir, y_mirror); if (dev_drv->iommu_enabled) { rk_fb_poll_wait_frame_complete(); if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } local_irq_restore(flags); return 0; } else { if (dev_drv->iommu_enabled) { if (dev_drv->ops->mmu_en) dev_drv->ops->mmu_en(dev_drv); freed_index = 0; } } #if defined(CONFIG_LOGO) main_fbi->fbops->fb_set_par(main_fbi); #if defined(CONFIG_LOGO_LINUX_BMP) if (fb_prewine_bmp_logo(main_fbi, FB_ROTATE_UR)) { fb_set_cmap(&main_fbi->cmap, main_fbi); fb_show_bmp_logo(main_fbi, FB_ROTATE_UR); } #else if (fb_prepare_logo(main_fbi, FB_ROTATE_UR)) { fb_set_cmap(&main_fbi->cmap, main_fbi); fb_show_logo(main_fbi, FB_ROTATE_UR); } #endif main_fbi->fbops->fb_pan_display(&main_fbi->var, main_fbi); #endif } else { struct fb_info *extend_fbi = rk_fb->fb[dev_drv->fb_index_base]; extend_fbi->var.pixclock = rk_fb->fb[0]->var.pixclock; extend_fbi->fbops->fb_open(extend_fbi, 1); if (dev_drv->iommu_enabled) { if (dev_drv->mmu_dev) rockchip_iovmm_set_fault_handler(dev_drv->dev, rk_fb_sysmmu_fault_handler); } rk_fb_alloc_buffer(extend_fbi); } #endif
相關推薦
[RK3288][Android6.0] 除錯筆記 --- 移除uboot和kernel開機logo
Platform: RockchipOS: Android 6.0Kernel: 3.10.92diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dtsindex ad3bc1a.
[RK3288][Android6.0] 除錯筆記 --- eMMC分割槽號和名字的對應
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有時候需要知道mmcblk對應的分割槽是哪一個,其實驅動已經完成這個功能了,如下: [email protected]:/dev/blo
[RK3288][Android6.0] 除錯筆記 --- 普通串列埠的新增
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 uart0,1,3,4 (普通串列埠) 用的是同一個串列埠驅動. uart2(除錯串列埠)的驅動程式碼嵌在fiq debugger的code中. 相關的配置在rk3288.dtsi中:
[RK3288][Android6.0] 除錯筆記 --- hwclock命令無法使用
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 現象: 使用hwclock,提示找不到檔案 [email protected]:/ # hwclock
[RK3288][Android6.0] 除錯筆記 --- I2C通訊失敗問題
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 使用rk3288的i2c5讀寫時,會出現以下error log: [email prot
[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法
[RK3288][Android6.0] 除錯筆記 --- user版本串列埠只有輸出不能輸入
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92現象: 編譯成user版本之後串列埠只有輸出沒有輸入.原因: 編譯user版本之後 ro.debug
[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果
[RK3288][Android6.0] 除錯筆記 --- Audio驅動層判斷錄音資料是否異常
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前有提到上層可以通過dump pcm資料檢視波形來確定錄音取樣的資料是否正常,這裡給出驅動層檢視
[RK3288][Android6.0] 除錯筆記 --- 除錯串列埠的更換
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假設專案有需求要將除錯串列埠uart2 改成 uart1, 改動如下 (還未驗證,先分享給大家,
[RK3288][Android6.0] 除錯筆記 --- pmu(rk818)暫存器讀寫
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk的pmu模組只提供了每次單個暫存器的讀寫,驅動提供了這個節點供使用:/sys/rk818/rk818_test 舉例: 讀取: echo r
[RK3288][Android6.0] 除錯筆記 --- 遮蔽系統下拉選單顯示
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 [email protected]:~/rk3288/frameworks/base/
[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動: init.rk30board.
[RK3288][Android6.0] 除錯筆記 --- 螢幕顯示旋轉方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 顯示模組提供了一個property供修改旋轉方向,名為”ro.sf.hwrotation”,有四個值可選 Surface.java /** *
[RK3288][Android6.0] 除錯筆記 --- eMMC壞塊測試
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 網上搜到一個叫eMMC Brickbug Check的apk 啟動后里面的Check Memory一項提示要root,但是系統已經是root過的了,
[RK3288][Android6.0] 除錯筆記 --- CPU溫度降頻控制
rk3288平臺關於溫度調節cpu頻率有個bug. 在rk3288.dtsi中,有: temp-limit-enable = <1>; target-temp = <80>; min_temp_limit = <48>
[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不
[RK3288][Android6.0] 除錯筆記 --- RT5640 I2S對應的ADC/DAC通路
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Audio Codec RT5640 有兩路I2S,如下圖: 原本以為I2S1對應的就是ADCLR1/DACLR1,I2S2對應的就是ADCLR
[RK3288][Android6.0] 除錯筆記 --- CPU使用的頻率表
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 系統中有三張CPU相關的頻率表: 1. rockchip-cpufreq.c: /* Fr
[RK3288][Android6.0] 除錯筆記 --- Audio錄音PCM資料抓取
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 當錄音異常時需要把資料dump出來判斷問題出在哪一層,RK雖然在HAL層已經提供了dump方法,但