@chenlinfei 快亿点点(50%左右,还是达不到理论值,所以应该是有复合原因影响,复合影响的问题,都不好查)

xiaowenge 发布的帖子
-
【DIY教程】D1哪吒开发板改成HDMI输出
D1哪吒开发板自带的固件和官方释放的Tina D1 v1.0.1 SDK默认都是mipi显示输出,如果需要改成HDMI输出,按场景需求,有以下三种方法:
1.开发板直接命令行切换
这种方法仅限本次开机,重启设备知乎又会重新加载DTS,变回mipi输出
命令:cd /sys/kernel/debug/dispdbg echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
此时开发板会改成HDMI输出,使用命令cat colorbar可以进行测试是否切换成功了:
echo 1 > /sys/class/disp/disp/attr/colorbar
详见D1在线文档:https://d1.docs.aw-ol.com/study/study_5connect/#hdmi
2.烧HDMI固件
烧写官方提供的HDMI输出固件,就会变成HDMI输出,每次开机都是
详见:https://d1.docs.aw-ol.com/source/3_getimg/
固件下载地址:https://www.aw-ol.com/downloads/resources/44
3.修改源码
如果想自己制作一个HDMI输出的固件,可以按照如下方法修改源码
(1)修改DTS文件,uboot的dts和内核的dts都要改tina/device/config/chips/d1/configs/nezha$ git diff . diff --git a/configs/nezha/linux-5.4/board.dts b/configs/nezha/linux-5.4/board.dts index bfeed6c..1cef004 100755 --- a/configs/nezha/linux-5.4/board.dts +++ b/configs/nezha/linux-5.4/board.dts @@ -1128,30 +1128,25 @@ chn_cfg_mode : Hardware DE channel allocation config. 0:single display with disp_init_enable = <1>; disp_mode = <0>; - screen0_output_type = <1>; - screen0_output_mode = <4>; - - screen1_output_type = <3>; - screen1_output_mode = <10>; - - screen1_output_format = <0>; - screen1_output_bits = <0>; - screen1_output_eotf = <4>; - screen1_output_cs = <257>; - screen1_output_dvi_hdmi = <2>; - screen1_output_range = <2>; - screen1_output_scan = <0>; - screen1_output_aspect_ratio = <8>; - - dev0_output_type = <1>; - dev0_output_mode = <4>; + screen0_output_type = <3>; + screen0_output_mode = <10>; + + screen0_output_format = <0>; + screen0_output_bits = <0>; + screen0_output_eotf = <4>; + screen0_output_cs = <257>; + screen0_output_dvi_hdmi = <2>; + screen0_output_range = <2>; + screen0_output_scan = <0>; + screen0_output_aspect_ratio = <8>; + + screen1_output_type = <1>; + screen1_output_mode = <4>; + + dev0_output_type = <4>; + dev0_output_mode = <10>; dev0_screen_id = <0>; - dev0_do_hpd = <0>; - - dev1_output_type = <4>; - dev1_output_mode = <10>; - dev1_screen_id = <1>; - dev1_do_hpd = <1>; + dev0_do_hpd = <1>; def_output_dev = <0>; hdmi_mode_check = <1>; diff --git a/configs/nezha/uboot-board.dts b/configs/nezha/uboot-board.dts old mode 100644 new mode 100755 index 793dec2..a5c99a2 --- a/configs/nezha/uboot-board.dts +++ b/configs/nezha/uboot-board.dts @@ -214,30 +214,25 @@ disp_init_enable = <1>; disp_mode = <0>; - screen0_output_type = <1>; - screen0_output_mode = <4>; - - screen1_output_type = <3>; - screen1_output_mode = <10>; - - screen1_output_format = <0>; - screen1_output_bits = <0>; - screen1_output_eotf = <4>; - screen1_output_cs = <257>; - screen1_output_dvi_hdmi = <2>; - screen1_output_range = <2>; - screen1_output_scan = <0>; - screen1_output_aspect_ratio = <8>; - - dev0_output_type = <1>; - dev0_output_mode = <4>; + screen0_output_type = <3>; + screen0_output_mode = <10>; + + screen0_output_format = <0>; + screen0_output_bits = <0>; + screen0_output_eotf = <4>; + screen0_output_cs = <257>; + screen0_output_dvi_hdmi = <2>; + screen0_output_range = <2>; + screen0_output_scan = <0>; + screen0_output_aspect_ratio = <8>; + + screen1_output_type = <1>; + screen1_output_mode = <4>; + + dev0_output_type = <4>; + dev0_output_mode = <10>; dev0_screen_id = <0>; - dev0_do_hpd = <0>; - - dev1_output_type = <4>; - dev1_output_mode = <10>; - dev1_screen_id = <1>; - dev1_do_hpd = <1>; + dev0_do_hpd = <1>; def_output_dev = <0>; hdmi_mode_check = <1>;
(2)重新编译uboot
因为单独make编译的时候默认是不编译ubootd的,所以需要编译一下uboot//进入uboot代码路径 cboot //单独编译uboot,编完uboot文件会自动复制到方案下,不用管它 muboot //重新编译打包 make -j64 pack
(3)改掉启动logo(可选)
sdk自带的启动logo是适配mipi屏幕的,在HDMI屏幕上显示会异常,所以建议改掉原SDK自带那个哪吒的启动logo,改成了linux小企鹅,大家可以把tina/device/config/chips/d1/configs/nezha/config 下面的bootlogo.bmp文件替换成下面这个文件:
bootlogo.7z完成以上几步之后,插上HDMI并启动开发板,显示器上就会输出linux小企鹅的logo了
-
回复: D1哪吒开发板默认输出改成HDMI
@xiaowenge 在 D1哪吒开发板默认输出改成HDMI 中说:
@cloud_d1 知道了,你们的uboot没更新,因为单独make编译的时候默认是不编译ubootd的。
做这一步://进入uboot代码路径 cboot //单独编译uboot,编完uboot文件会自动复制到方案下,不用管它 muboot //重新编译打包 make -j64 pack
附完整dts文件修改,之前的有个***dev0_do_hpd = <1>;***的参数没改到:
tina/device/config/chips/d1/configs/nezha$ git diff . diff --git a/configs/nezha/linux-5.4/board.dts b/configs/nezha/linux-5.4/board.dts index bfeed6c..1cef004 100755 --- a/configs/nezha/linux-5.4/board.dts +++ b/configs/nezha/linux-5.4/board.dts @@ -1128,30 +1128,25 @@ chn_cfg_mode : Hardware DE channel allocation config. 0:single display with disp_init_enable = <1>; disp_mode = <0>; - screen0_output_type = <1>; - screen0_output_mode = <4>; - - screen1_output_type = <3>; - screen1_output_mode = <10>; - - screen1_output_format = <0>; - screen1_output_bits = <0>; - screen1_output_eotf = <4>; - screen1_output_cs = <257>; - screen1_output_dvi_hdmi = <2>; - screen1_output_range = <2>; - screen1_output_scan = <0>; - screen1_output_aspect_ratio = <8>; - - dev0_output_type = <1>; - dev0_output_mode = <4>; + screen0_output_type = <3>; + screen0_output_mode = <10>; + + screen0_output_format = <0>; + screen0_output_bits = <0>; + screen0_output_eotf = <4>; + screen0_output_cs = <257>; + screen0_output_dvi_hdmi = <2>; + screen0_output_range = <2>; + screen0_output_scan = <0>; + screen0_output_aspect_ratio = <8>; + + screen1_output_type = <1>; + screen1_output_mode = <4>; + + dev0_output_type = <4>; + dev0_output_mode = <10>; dev0_screen_id = <0>; - dev0_do_hpd = <0>; - - dev1_output_type = <4>; - dev1_output_mode = <10>; - dev1_screen_id = <1>; - dev1_do_hpd = <1>; + dev0_do_hpd = <1>; def_output_dev = <0>; hdmi_mode_check = <1>; diff --git a/configs/nezha/uboot-board.dts b/configs/nezha/uboot-board.dts old mode 100644 new mode 100755 index 793dec2..a5c99a2 --- a/configs/nezha/uboot-board.dts +++ b/configs/nezha/uboot-board.dts @@ -214,30 +214,25 @@ disp_init_enable = <1>; disp_mode = <0>; - screen0_output_type = <1>; - screen0_output_mode = <4>; - - screen1_output_type = <3>; - screen1_output_mode = <10>; - - screen1_output_format = <0>; - screen1_output_bits = <0>; - screen1_output_eotf = <4>; - screen1_output_cs = <257>; - screen1_output_dvi_hdmi = <2>; - screen1_output_range = <2>; - screen1_output_scan = <0>; - screen1_output_aspect_ratio = <8>; - - dev0_output_type = <1>; - dev0_output_mode = <4>; + screen0_output_type = <3>; + screen0_output_mode = <10>; + + screen0_output_format = <0>; + screen0_output_bits = <0>; + screen0_output_eotf = <4>; + screen0_output_cs = <257>; + screen0_output_dvi_hdmi = <2>; + screen0_output_range = <2>; + screen0_output_scan = <0>; + screen0_output_aspect_ratio = <8>; + + screen1_output_type = <1>; + screen1_output_mode = <4>; + + dev0_output_type = <4>; + dev0_output_mode = <10>; dev0_screen_id = <0>; - dev0_do_hpd = <0>; - - dev1_output_type = <4>; - dev1_output_mode = <10>; - dev1_screen_id = <1>; - dev1_do_hpd = <1>; + dev0_do_hpd = <1>; def_output_dev = <0>; hdmi_mode_check = <1>;
-
回复: D1哪吒开发板默认输出改成HDMI
@cloud_d1 知道了,你们的uboot没更新,因为单独make编译的时候默认是不编译ubootd的。
做这一步://进入uboot代码路径 cboot //单独编译uboot,编完uboot文件会自动复制到方案下,不用管它 muboot //重新编译打包 make -j64 pack
-
【DIY教程】D1哪吒开发板移植wifi6模组AW869B
D1哪吒开发板自带的是全志的XR829模组,支持2.4G wifi4和bt,但是不支持wifi6。
相比wifi4,wifi6具有更高的速度、更低的延时、更好的安全性等特点,在高端AIoT产品中有广泛的使用场景。因此,我们决定在D1上移植个wifi6模组来玩。
我们的wifi6模组选择的是全志自己做的AW869B,该模组已经在全志平板、智能物联等产品上应用。1.硬件修改
1.1 换模组
AW869B和D1哪吒开发板原装的XR829是pin to pin的,所以只需要撬开板子上的哪吒眼,把XR829吹下来,就可以直接把AW869B替换上去
1.2 改电
AW869B规格书严格要求io供电是1.8V,但是现在SDIO_DATA脚的电压上拉测的只有1.4V,所以还要改个电,具体改法如下:
1.2.1 修改VDDIO供电
VDDIO供电默认来自VCC-PG,将VCC-PG由VCC_3V3改到LDOA-OUT.【即:拆掉RS121,贴上RS90(R0402,0欧)】
1.2.2 BT-RESETN引脚拉低
AW869B规格要求.【即:贴上RW20(R0402,100K)】
修改点如图:
2.软件修改
patch下载地址:https://www.aw-ol.com/downloads/resources/45
2.1 添加AW869B驱动
① 将/software/driver下的aic8800文件夹拷贝至lichee/linux-5.4/drivers/net/wireless目录下
② lichee/linux-5.4/drivers/net/wireless/Makefile中添加obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/
③ lichee/linux-5.4/drivers/net/wireless/Kconfig中添加source "drivers/net/wireless/aic8800/Kconfig"
④ 在根目录执行make kernel_menuconfig命令,选中Device Drivers 》 Network device support 》 Wireless LAN 》 [*]AIC wireless Support <M> AIC8800 wlan Support <M> AIC8800 bluetooth Support
⑤ 执行mkernel
2.2 适配Module
①将software/patch目录下的0001-AIC8800-WiFi-Aic8800-WiFi-add-new-modules.path拷贝到target/allwinner/d1-common下执行git am
②在Tina根目录执行make menuconfig,选中 Kernel modules 》 Wireless Drivers 》 < * > kmod-net-aic8800
2.3 添加firmware文件
①将/software/firmware下的aic8800目录文件夹拷贝至package/firmware/linux-firmware目录下
②在Tina根目录执行make menuconfig,选中 Firmware 》 < * > aic8800-firmware. (如不显示aic8800-firmware可以在根目录执行build\envsetup.sh)
2.4 修改设备树的PG口电压
①将software/patch目录下的0001-AIC8800-WiFi-CONFIG_PG_1_8V.patch拷贝到/device/config/chips/d1/configs/nezha/linux-5.4执行git am
2.5 编译、烧写、运行。 -
回复: D1哪吒开发板默认输出改成HDMI
@tianmao 在 D1哪吒开发板默认输出改成HDMI 中说:
@xiaowenge 赞,搭顺风车问下,这个企鹅是240320的黑底的照片,背景也是黑色的,这种显示比较好,如果我是白底的400400这种的,背景颜色应该怎么设置呢
看了下配置文件注释,好像没有配置背景颜色这么一说(当然也可能是有但是配置文件没有更新,具体要读一下驱动源码)
如果不是黑底的话,应该是P一整张适配整个屏幕大小的开机log吧,这样才不会有色差
-
回复: D1哪吒开发板默认输出改成HDMI
有朋友提到用我以上的修改还是会绿屏(满屏绿那种),我回忆了一下修改点,我之前是改掉了原SDK自带那个哪吒的启动logo,改成了linux小企鹅,大家可以把tina/device/config/chips/d1/configs/nezha/config 下面的bootlogo.bmp文件替换成下面这个文件试试:
bootlogo.7z
(文件是小企鹅启动logo)
(之前改掉启动logo是因为哪吒那张图3M多太大了,我不是故意改掉不告诉你们的。。。。) -
回复: uboot中 ubifs 可以关闭吗
不建议直接关掉ubifs,因为可能对uboot其它模块有影响,我们的文档中有一份《D1 Tina Linux 启动优化开发指南》,里面有建议的优化启动速度方法,可以先参考进行启动时间的优化
-
【固件发布】D1哪吒HDMI测试固件20210804(开机HDMI就有小企鹅启动logo)
由于最近很多朋友在论坛提到HDMI的问题,所以上传一个HDMI输出的固件,供大家测试用
D1哪吒HDMI测试固件20210804(开机HDMI就有小企鹅启动logo)
下载地址:https://www.aw-ol.com/downloads/resources/44
固件配置:
基于D1 哪吒对外释放 Open V1.0.1版本SDK:
(1)默认boot dts和内核dts都配置成了HDMI输出,插上HDMI显示器(1080P)开机就有小企鹅启动logo输出;
(2)* echo 1 > /sys/class/disp/disp/attr/colorbar * 可以测试HDMI的colorbar;
(3)DTS修改参考论坛帖子:https://bbs.aw-ol.com/topic/253
发布时间:20210804
-
神贴:CSDN上硬件十万个为什么的公众号文章合集
发现个神贴:CSDN上硬件十万个为什么的公众号文章合集
干货知识都整理得整整齐齐的,软件硬件的都有,都是实用贴,学会了就是高级硬件工程师了
上链接:https://blog.csdn.net/pan0755/article/details/74454344 -
回复: 请问D1 tina v1.0.0 是不是默认支持了自带的mipi屏幕, 可是为什么我的没有显示呢?背光是亮的
@memory 拿到代码,repo sync就是最新的
-
回复: 请问D1怎么开双显和同显异显?
@memory 在 请问D1怎么开双显和同显异显? 中说:
@bedrock 在 请问D1怎么开双显和同显异显? 中说:
见文档:
固件下载:
https://d1.docs.aw-ol.com/source/3_getimg/这个固件我这里MIPI可以显示, 但是HDMI不显示:
[ 5.422590] [HDMI2 error]: sink do not support this mode:0 [ 5.965702] init: Console is alive [ 5.969722] init: - watchdog - [ 5.973342] init: - preinit -
D1哪吒双屏同显测试固件
下载地址:https://www.aw-ol.com/downloads/resources/38固件配置:
基于D1 哪吒对外释放 Open V1.0.1版本SDK:
(1)可适配1G/2G版本D1哪吒开发板;
(2)可以支持8寸MIPI屏幕和HDMI双同时输出相同的视频,使用 tplaydemo +视频 路径即可播放;
发布时间:20210618
作者:Yongheng
dts配好了,你要tplaydemo +视频播放 的时候才会同时从两个屏幕输出播放的视频
-
回复: D1主板烧录HDMI输出固件,但无输出
@xiaowenge 在 D1主板烧录HDMI输出固件,但无输出 中说:
两部走
1.手动切到HDMIcd /sys/kernel/debug/dispdbg echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
2.cat colorbar看看
echo 1 > /sys/class/disp/disp/attr/colorbar
-
回复: D1主板烧录HDMI输出固件,但无输出
两部走
1.手动切到HDMIcd /sys/kernel/debug/dispdbg echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
2.cat colorbar看看
echo 1 > /sys/class/disp/disp/attr/colorbar
-
回复: 【骚操作】启动阶段改设备DTS的方法
*注:如果参数值是数字的话,要用"<>"括起来,如:
fdt set /soc/disp/ screen0_output_type <4>
如果是字符串的话要用引号引起来,如:
dt set /soc/disp/ boot_fb0 "000000007eb4d680,780,438,20,1e00,348,17c,438,2bc"
-
【骚操作】启动阶段改设备DTS的方法
在设备BSP调试的过程中,经常会出现需要修改DTS的情况,比如调试一个新的屏幕、传感器或者wifi模组,传统的方法是:
在源码中直接修改board.dts文件->重新编译&打包->烧写到设备里
这种方法繁杂,编译和烧写都要花费时间,严重影响开发效率。
因此,全志提供了一个启动阶段DTS调试的方法,可以让我们在启动阶段就把DTS改掉,这次启动加载的就是改后的DTS。
*注:这种修改是一次性的,不可以保存的,只限这次启动的时候生效,断电或者重启就不生效了1.设备上电过程中串口按住电脑键盘的"s"按键,让设备进入boot:
*注:是真的按住调试的电脑的键盘的s按键,和按住2另设备跳烧录的操作一样(参考:https://d1.docs.aw-ol.com/study/study_4compile/#pc2)
如果进入boot成功,就会有如下log,这时就可以在串口对设备进行DTS修改操作。
(详细log如下)[188]HELLO! BOOT0 is starting! [191]BOOT0 commit : 27369ab [194]set pll start [196]periph0 has been enabled [199]set pll end [200][pmu]: bus read error [203]board init ok [205]DRAM only have internal ZQ!! [208]get_pmu_exist() = -1 [210]DRAM BOOT DRIVE INFO: V0.24 [213]DRAM CLK = 792 MHz [215]DRAM Type = 3 (2:DDR2,3:DDR3) [219]DRAMC ZQ value: 0x7b7bfb [221]DRAM ODT value: 0x42. [224]ddr_efuse_type: 0x0 [227]DRAM SIZE =1024 M [231]DRAM simple test OK. [233]dram size =1024 [235]key press : s [237]spinand UBOOT_START_BLK_NUM 8 UBOOT_LAST_BLK_NUM 32 [242]block from 8 to 32 [318]Check is correct. [320]dma 0x2f9f8 int is not used yet [323]dma 0x2f9f8 int is free, you do not need to free it again [329]Entry_name = opensbi [332]Entry_name = u-boot [335]Entry_name = dtb [338]Jump to second Boot. OpenSBI v0.6 ____ _____ ____ _____ / __ \ / ____| _ \_ _| | | | |_ __ ___ _ __ | (___ | |_) || | | | | | '_ \ / _ \ '_ \ \___ \| _ < | | | |__| | |_) | __/ | | |____) | |_) || |_ \____/| .__/ \___|_| |_|_____/|____/_____| | | |_| Platform Name : T-HEAD Xuantie Platform Platform HART Features : RV64ACDFIMSUVX Platform Max HARTs : 1 Current Hart : 0 Firmware Base : 0x40000400 Firmware Size : 75 KB Runtime SBI Version : 0.2 MIDELEG : 0x0000000000000222 MEDELEG : 0x000000000000b1ff PMP0 : 0x0000000040000000-0x000000004001ffff (A) PMP1 : 0x0000000040000000-0x000000007fffffff (A,R,W,X) PMP2 : 0x0000000080000000-0x00000000bfffffff (A,R,W,X) PMP3 : 0x0000000000020000-0x0000000000027fff (A,▒ U-Boot 2018.05-g0a88ac9 (Apr 30 2021 - 11:23:28 +0000) Allwinner Technology [00.421]DRAM: 1 GiB [00.423]Relocation Offset is: 3def0000 [00.427]secure enable bit: 0 [00.429]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=300Mhz [00.436]flash init start [00.438]workmode = 0,storage type = 0 [00.444]sunxi-spinand-phy: not detect any munufacture from id table [00.450]sunxi-spinand-phy: get spi-nand Model from fdt fail [00.456]sunxi-spinand-phy: get phy info from fdt fail device nand0 <nand>, # parts = 4 #: name size offset mask_flags 0: boot0 0x00100000 0x00000000 1 1: uboot 0x00300000 0x00100000 1 2: secure_storage 0x00100000 0x00400000 1 3: sys 0x0fb00000 0x00500000 0 active partition: nand0,0 - (boot0) 0x00100000 @ 0x00000000 defaults: mtdids : nand0=nand mtdparts: mtdparts=nand:1024k@0(boot0)ro,3072k@1048576(uboot)ro,1024k@4194304(secure_storage)ro,-(sys) [00.794]ubi0: attaching mtd4 [01.190]ubi0: scanning is finished [01.200]ubi0: attached mtd4 (name "sys", size 251 MiB) [01.204]ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 258048 bytes [01.211]ubi0: min./max. I/O unit sizes: 4096/4096, sub-page size 2048 [01.217]ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096 [01.223]ubi0: good PEBs: 1004, bad PEBs: 0, corrupted PEBs: 0 [01.228]ubi0: user volume: 9, internal volumes: 1, max. volumes count: 128 [01.235]ubi0: max/mean erase counter: 2/1, WL threshold: 4096, image sequence number: 0 [01.243]ubi0: available PEBs: 0, total reserved PEBs: 1004, PEBs reserved for bad PEB handling: 40 [01.251]sunxi flash init ok [01.254]line:714 init_clocks __clk_init: clk pll_periph0x2 already initialized register fix_factor clk error [01.264]drv_disp_init request pwm success, pwm2:pwm2:0x2000c00. [01.281]drv_disp_init finish [01.283]boot_gui_init:start [01.286]set disp.dev2_output_type fail. using defval=0 [01.478]boot_gui_init:finish [01.891]LCD open finish partno erro : can't find partition bootloader 54 bytes read in 0 ms [02.052]bmp_name=bootlogo.bmp size 3072054 3072054 bytes read in 126 ms (23.3 MiB/s) [02.402]Loading Environment from SUNXI_FLASH... OK [02.435]out of usb burn from boot: not need burn key [02.460]update bootcmd [02.482]change working_fdt 0x7eaafda8 to 0x7ea8fda8 [02.503]update dts Hit any key to stop autoboot: 0 => sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss Unknown command 'sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss' - try 'help' => =>
2.要看哪个DTS节点的参数,就输入 fdt list +节点名称
比如查看整个/soc/的DTS:=> fdt list /soc/ soc@3000000 { #address-cells = <0x00000002>; #size-cells = <0x00000002>; compatible = "simple-bus"; ranges; sram_ctrl@3000000 { }; rtc_ccu@7090000 { }; clock@2001000 { }; clock@7010000 { }; interrupt-controller@10000000 { }; uart@2500000 { }; uart@2500400 { }; uart@2500800 { }; uart@2500c00 { }; uart@2501000 { }; uart@2501400 { }; ce@03040000 { }; s_cir@7040000 { }; ir@2003000 { }; deinterlace@5400000 { }; eth@4500000 { }; rtc@7090000 { }; dma-controller@3002000 { }; timer@2050000 { }; watchdog@6011000 { }; mbus-comtroller@3102000 { }; pmu { }; idle { }; pinctrl@2000000 { }; spi@4025000 { }; spi@4026000 { }; twi@2502000 { }; twi@2502400 { }; twi@2502800 { }; twi@2502c00 { }; ledc@2008000 { }; pwm@2000c00 { }; keyboard@2009800 { }; sid@3006000 { }; gpadc@2009000 { }; ths@02009400 { }; rtp@2009c00 { }; codec@2030000 { }; dummy_cpudai@203034c { }; sound@2030340 { }; rpaf-dsp@203034c { }; dmic@2031000 { }; sound@2031050 { }; sounddmic@2031060 { }; daudio@2032000 { }; sounddaudio0@20320a0 { }; daudio@2033000 { }; sounddaudio1@20330a0 { }; daudio@2034000 { }; sounddaudio2@20340a0 { }; hdmiaudio@20340a4 { }; spdif@2036000 { }; soundspdif@2036040 { }; g2d@5410000 { }; disp@5000000 { }; ve@1c0e000 { }; msgbox@0601f000 { }; lcd0@1c0c000 { }; sdmmc@4022000 { }; sdmmc@4020000 { }; sdmmc@4021000 { }; hdmi@5500000 { }; usbc0@0 { }; udc-controller@0x04100000 { }; ehci0-controller@0x04101000 { }; ohci0-controller@0x04101400 { }; usbc1@0 { }; ehci1-controller@0x04200000 { }; ohci1-controller@0x04200400 { }; pwm0@2000c10 { }; pwm1@2000c11 { }; pwm2@2000c12 { }; pwm3@2000c13 { }; pwm4@2000c14 { }; pwm5@2000c15 { }; pwm6@2000c16 { }; pwm7@2000c17 { }; vind@5800800 { }; tvd@05c00000 { }; tvd0@05c01000 { }; card0_boot_para@2 { }; card2_boot_para@3 { }; rfkill@0 { }; btlpm@0 { }; addr_mgt@0 { }; };
再比如看pwm0的设置则为:
=> fdt list /soc/pwm0 pwm0@2000c10 { compatible = "allwinner,sunxi-pwm0"; reg = <0x00000000 0x02000c10 0x00000000 0x00000004>; reg_base = <0x02000c00>; pinctrl-names = "active", "sleep"; pinctrl-0 = <0x00000056>; pinctrl-1 = <0x00000057>; status = "okay"; phandle = <0x00000030>; };
3.如果要修改某个节点的参数,则使用 fdt set 节点名称 参数名称 要修改的数值
如 fdt set /soc/disp dev0_do_hpd <0>4.改好后输入 boot 启动设备即可。
-
回复: SPI-NANDFLASH性能低问题
@chenlinfei 在 SPI-NANDFLASH性能低问题 中说:
不了理论值的,应该小于理论值很多,但是不到理论值的1/10就有点低了。另外,uboot读nand能有接近10MB/s。
是否能优化spi小数据读写?还有擦除耗时和编程耗时啥的,每page(2k)大概耗时在45us左右,算下来读取的速度应该在22M/s左右。DMA耗时的问题确实存在,已经内部在查这个问题了。
-
回复: 请问《D1_Tina_Linux_配网_开发指南.pdf》里面的声波配网app哪里可以下载呢?
@tigger tina源码里面有,/package/allwinner/smartlinkd (大概是这个目录,你搜下)
-
【资料发布】D1芯片封装文档及DDR参考设计文档
资料释放:
D1芯片封装文档及DDR参考设计文档
拥有了它们你就可以基于D1芯片设计自己的小板板了
详情请到全志客户服务平台下载:
https://open.allwinnertech.com/#/doc?menuID=2
-
回复: SPI-NANDFLASH性能低问题
到不了理论值那么高吧,SPI-Nand顺序写估计能到2MB/s(四线),顺序读5MB/s差不多了。SPI-Nand随机写是120iops左右,随机读估计在600iops左右
-
回复: D1哪吒开发板默认输出改成HDMI
@nideyida 在 D1哪吒开发板默认输出改成HDMI 中说:
我先用在线文档介绍的方法切到HDMI输出:
cd /sys/kernel/debug/dispdbg echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
再cat colorbar,就不绿了,说明不是硬件或者显示器的问题,应该是我配置的问题
echo 1 > /sys/class/disp/disp/attr/colorbar
实测播放视频没绿。。。。就cat colorbar就绿,这就很尴尬了。。。
-
回复: D1哪吒开发板默认输出改成HDMI
board.dts和uboot-board.dts你都这样改:
tina/device/config/chips/d1/configs/nezha$ git diff . diff --git a/configs/nezha/linux-5.4/board.dts b/configs/nezha/linux-5.4/board.dts index bfeed6c..335895e 100755 --- a/configs/nezha/linux-5.4/board.dts +++ b/configs/nezha/linux-5.4/board.dts @@ -1128,25 +1128,25 @@ chn_cfg_mode : Hardware DE channel allocation config. 0:single display with disp_init_enable = <1>; disp_mode = <0>; - screen0_output_type = <1>; - screen0_output_mode = <4>; - - screen1_output_type = <4>; - screen1_output_mode = <10>; - - screen1_output_format = <0>; - screen1_output_bits = <0>; - screen1_output_eotf = <4>; - screen1_output_cs = <257>; - screen1_output_dvi_hdmi = <2>; - screen1_output_range = <2>; - screen1_output_scan = <0>; - screen1_output_aspect_ratio = <8>; - - dev0_output_type = <1>; - dev0_output_mode = <4>; + screen0_output_type = <3>; + screen0_output_mode = <10>; + + screen0_output_format = <0>; + screen0_output_bits = <0>; + screen0_output_eotf = <4>; + screen0_output_cs = <257>; + screen0_output_dvi_hdmi = <2>; + screen0_output_range = <2>; + screen0_output_scan = <0>; + screen0_output_aspect_ratio = <8>; + + screen1_output_type = <1>; + screen1_output_mode = <4>; + + dev0_output_type = <4>; + dev0_output_mode = <10>; dev0_screen_id = <0>;
-
回复: D1 DMIC+AMIC同时读取,系统出现kernel panic
哦哦,2路amic当回路是吧?
//使用arecord命令,在设备硬件设备snddmic上录一个采样率为16000、格式为S16_LE、6声道的音频文件,存到/tmp/test.wav
arecord -D hw:snddmic -r 16000 -f S16_LE -c 6 /tmp/test.wav
试下能不能录到音,确认一下硬件是不是坏的 -
D1-H/D1s SPI NAND & DDR支持列表
以下为D1 tina理论上支持的nand列表,用料量产前建议先找全志或代理商FAE确认压测情况。
Micron:MT29F1G01ABAFDSF-AAT(NW808)
MT29F2G01ABAGDWB
Winbond:W25N01GVZEIG
MXIC:MX35LF1GE4AB
MX35LF2GE4AD
GigaDevi ce:GD5F1GQ4UBYIGR
GD5F1GQ5UEYIGR
GD5F2GQ5UEYIGR
ESMT:F50L2G41XA
F50L1G41LB(2M) -> F50L1G41LB-104YG2M F50L1G41LB- 104YG2ME
Dosilicon:DS35Q1GA-1B
FORESEE:E FS35ND01G-S1F1QWFI
Zetta:ZD35Q1GA-IBR
FM:FM25S01更新DDR支持列表:
Hynix :H5TQ4G63EFR-RDC DDR3 FBGA 96 4Gb 256Mx16 792MHz
Micron: MT41K512M16HA-125 DDR3L FBGA 96 8Gb 512Mx16 792MHz
SpecTek: PRN512M16Z11CD8LY-083 DDR3 FBGA 96 8Gb 512Mx16 792MHz
(D1-H哪吒开发板上用的就是这几款,全志内部做过压力测试的) -
【系统更新】更新多媒体中间件,在Tina D1上支持gstreamer
基于D1_Tina_Open V1.0.1版本更新对gstreamer的支持:
1、Tina升级gstreamer主包及其各插件包到1.16.3版本,支持RV架构;
2、gstreamer显示插件sunxifbsink支持g2d硬件旋转;
3、更新多媒体中间件。
详见全志客户服务平台:全志客户服务平台
-
回复: 请问哪吒 D1 开发板拔插 HDMI 显示器, 提示sink do not support this mode 是什么问题? 换了两台显示器了.
echo 4 10 0 0 0x4 0x101 0 0 0 8 > param;
这里第二个参数是分辨率,按照.dts注释里写的:
0screenx_output_mode (used for hdmi output, 0:480i 1:576i 2:480p 3:576p 4:720p50 5:720p60 6:1080i50 7:1080i60 8:1080p24 9:1080p50 10:1080p60 )
-
回复: 请问哪吒 D1 开发板拔插 HDMI 显示器, 提示sink do not support this mode 是什么问题? 换了两台显示器了.
@tigger 默认应该是MIPI输出,切到HDMI输出就好了:
cd /sys/kernel/debug/dispdbg echo disp0 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
-
回复: 围观 D1s EVB
参考D1原理图,MIPI会用到DSI-CKN\DSI-CKP\DSI-DN0\DSI-DP0\DSI-DN1\DSI-DP1\DSI-DN2\DSI-DP2\DSI-DN3\DSI-DP3\DSI-RESET:
*DSI-CNX/DSI-CPX是数据组,屏幕分辨率低的数据量少,一组也行,比较多的是 两组 和四组,720p以上分辨率一般4组。这里我们比较豪,可以直接上4组,支持1080P都行这几组引脚在F133都有:
查阅F133 user manual,可以看到有支持最多8路DMIC:
看引脚,PF16-PD19都可以用来做DMIC的数据脚,PD20可以用来做时钟
F133的引脚相对D1会少很多,只有一组DMIC脚,没有那么多复用的,操作空间会小很多,用了之后引脚的其它功能就不能再用了。回路正好将一路声音从amic的地方来回做AEC就可以了。
综上,语音小电视方案在F133上可行。
-
回复: 【DIY教程】用D1哪吒开发板做一个卡牌识别机,可以玩游戏王、狼人杀、三国杀、剧本杀
这个游戏王对战机会实现如下功能:
1.识别卡牌;
2.展示召唤效果——动画+光效+BGM;
3.修改攻击力/防御力
——这是线下对战中的一个痛点,因为在对战中经常有卡牌的效果影响怪兽的怪兽攻击力/防御力,比如场上有一只A怪兽的时候,B怪兽的攻击力会增加300点等以上功能需要两个显示屏幕实现,正好D1支持双屏异显,即同时接两个屏幕,分别输出不一样的内容,并且可以支持触控,这样看,我们的功能就都能在一块D1开发板上实现。
我们需要的硬件配置有:
D1哪吒开发板,MIPI屏幕+HDMI屏幕,USB摄像头,LED灯带做出来整个demo的硬件方案大概就是这样的:
-
回复: 【DIY教程】用D1哪吒开发板做一个卡牌识别机,可以玩游戏王、狼人杀、三国杀、剧本杀
这个小demo的灵感,来源于前些天很火的一个司法拍卖:
80块钱游戏卡“青眼白龙”拍出8700万天价!原主人是95后贪污近7000万被判无期
这款纯金的“青眼白龙”卡牌限量发售500套,官方定价为1万多人民币。
虽然这个次拍卖是被人恶意哄抬价格,但是根据近期日本拍卖网站的成交价格来看,这张卡的实际市场估值已经去到了20-30万人民币左右。
对此我们只能说:
与此同时,我们看到了这样一个抖音视频:
通过全息风扇玩游戏王,增强线下游戏的氛围感
小时候看游戏王的动画片,里面的角色对战的时候可以直接召唤到怪兽,出场还自带动画和BGM,而我们自己玩的时候,则是一堆冷冰冰的卡牌,想想真是太无趣了
所以我们决定做一个【现实版插件】——游戏王对战机!
通过屏幕效果的展示和一些辅助功能,增强线下卡牌对战的氛围感和体验 -
回复: R329编译错误
@tomwang 后面这份log没传成功。看之前那份编译环境啥的应该没啥问题,都编了大半了,可能时不断编出了新的库,虚拟机磁盘分配的空间不够了,所以编译异常,试着把虚拟器分配的空间调大试一下
-
回复: R329编译错误
satisfy_dependencies_for: Cannot satisfy the following dependencies for bluez-alsa:
你重新开一个终端,配置一下环境变量,然后lunch的时候选择r329_evb5_min-tina编译试一下
-
回复: R329按照官方文档下载无法编译
@tomwang
换了电脑还是一样的报错,那有两种可能:
1.你的账号权限有问题——概率极小,因为大家权限都是一样的,如果实在怀疑,可以重新注册一个账号试一下
2.配置环境&权限时你漏了一步没有做——大概率,但我不知道你的操作流程,分析不出时哪一步没做 -
回复: 想请问怎么在d1开发板上通过摄像头实时输出图像到显示器上
详见在线文档:https://d1.docs.allwinnertech.com/study/study_7camerademo/#_9
目前只是先拍,下一步是显示处理(实时) -
在线文档更新:USB摄像头拍照Demo
在线文档更新:USB摄像头拍照Demo —— https://d1.docs.allwinnertech.com/study/study_7camerademo/#_9
插上就能用,手把手叫你给D1装上眼睛
-
D1在线文档更新:手把手教你编译第一个Hello Word
D1在线文档更新:手把手教你编译第一个Hello Word
链接:
https://d1.docs.allwinnertech.com/study/study_6helloword/ -
回复: 以前以为XR829只是一个WIFI芯片,今天看了一下D1原理图,没想到是WIFI蓝牙二合一。
XR829还带ble。AW啥无线片子都有,什么带MCU的 wifi单模的 能跑鸿蒙的
-
回复: R329按照官方文档下载无法编译
@tomwang 在 R329按照官方文档下载无法编译 中说:
@xiaowenge 编译机台用的是ubuntu14.04,环境完全按照官方文档搭建完成。
看错误log的话好像是repo manifest问题?看Log是的,但是看你截图上的ls内容,代码应该都下完了,或者可以先检查下各目录的内容,是不是里面的东西没下完?
-
回复: R329的DSP开发如何申请?
@xacnma 在配置DSP环境时,需要获得Cadence 的license授权,这个好像不太好搞,需要直接和Cadence 签约,目前几个玩智能音箱的大客户和算法公司因为之前的项目有合作,基本都有签,可以直接玩起来,但是个人开发者估计不好搞,具可以和Cadence 沟通申请一下:https://www.synaptics.com/contact
-
回复: 2021年D1哪吒开发板第一期成果汇报
微信公众号 嵌入式IoT 开箱评测系列:
全志D1开发板(哪吒 RISCV64)开箱评测
关于d1哪吒开发板的启动流程分析
用哪吒D1开发板体验riscv向量底层编程
哪吒D1开发板RISC-V CLINT编程实践原稿转自公众号:嵌入式IoT
原创:bigmagic -
回复: 【资源汇总】D1-H芯片资料资源汇总
2021年第一期成果汇总
官宣文章:
1.【国产芯片之光!】全志科技发布首颗RISC-V应用处理器2.【免签NDA直接下】D1 Tina SDK v1.0正式释放!深入了解RISC-V的每一个DNA!
玩转开发板实例:
4.D1哪吒开发板开机连接wifi热点, 启动 sshd 服务
6.D1使用JTAG
10.哪吒开启 SSH 和 VNC 远程访问,再也不用鼠标和显示器了
13.全志D1裸奔工具XFEL
18.D1同时输出两个显示屏幕
20.将单独编译的opensbi u-boot kernel rootfs 烧录制作成可以启动的sdcard.img镜像
21.【Hacking Nezha Board】D1裸机程序开发
22.【Hacking Nezha Board】D1 Device Tree Oerlay
23.【Hacking Nezha Board】D1 boot适配
24.【深度讨论】目前D1芯片引导启动流程过长的问题,以及对RISC-V下引导程序环境的思考
25.自己动手编写一个非常简单的RISC-V C调用使用ABI规则ASM汇编的demo, 使用qemu-riscv64虚拟机测试.
26.D1精简版裸机程序
27.D1 哪吒开发板功耗数据
30.D1 尝试运行 Docker RISC-V 64位原生环境
31.D1芯片参考设计
32.如何让D1 uboot支持uImage镜像 + dtb启动系统
33.完整支持buildroot 2021 LTS构建D1开发板SD卡系统镜像
34.【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!
37.基于社区最新开源仓库(Opensbi、Linux)构建nezha - d1开发环境
38.哪吒D1/RVBoards RISCV Debian 64位 Docker 集成镜像
40.【实践操作】自己从头构建riscv 64 ubuntu等发行版系统!
42.使用Ubuntu20.04 LTS编译D1-Tina踩坑记录
官方威力加强包:
1.MIPI屏幕TFT08006支持3.ncnn支持
6.Fedora支持
活动&评测:
4.“创造 · 无限” 全志主题活动@2021 RISC-V中国峰会
5.开发者之声
-
回复: 锦绣海湾城房屋租售
借楼出租海湾城一期联排中间位别墅,
194平方,
豪华欧式装修,
5000一个月,
3层5室2厅4卫3阳,
带停车位2个,
物业费426元/月。
联系人:文工 16763232956
-
【代码编不过请看这里】D1 Tina SDK完整编译log
有开发者提到Tina编译会出现问题,不知道怎么解决,这里我们将完整Tina SDK编译时候的log打包一份供大家参考。下载地址:https://www.aw-ol.com/downloads/resources/41
我的代码仓库曾经编译过代码,故我先将out目录删掉全部重新编译,这样的log会比较全:
xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0$ rm -rf out/ xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0$ source build/envsetup.sh Setup env done! Please run lunch next. xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0$ lunch You're building on Linux Lunch menu... pick a combo: 1. d1_nezha_min-tina 2. d1_nezha-tina Which would you like? [Default d1_nezha]: 2 ============================================ TINA_BUILD_TOP=/home/xiaowenge/workspace/d_tina_d1_open_v1.0 TINA_TARGET_ARCH=riscv TARGET_PRODUCT=d1_nezha TARGET_PLATFORM=d1 TARGET_BOARD=d1-nezha TARGET_PLAN=nezha TARGET_BUILD_VARIANT=tina TARGET_BUILD_TYPE=release TARGET_KERNEL_VERSION=5.4 TARGET_UBOOT=u-boot-2018 TARGET_CHIP=sun20iw1p1 ============================================ xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0$ make -j > compilelog.log [1] 57825 Collecting target info: done+ mkdir -p /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/host + mkdir -p /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/staging_dir/target + cd /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/host + mkdir -p bin lib include stamp + cd /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/staging_dir/target + mkdir -p bin lib include stamp This is not dpkg install-info anymore, but GNU install-info See the man page for ginstall-info for command line arguments src/sstrip.c: In function 'readelfheader32': src/sstrip.c:363:1: warning: format '%d' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] HEADER_FUNCTIONS(32) ^ src/sstrip.c:363:1: warning: format '%d' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] src/sstrip.c:363:1: warning: format '%d' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] src/sstrip.c:363:1: warning: format '%d' expects argument of type 'int', but argument 5 has type 'long unsigned int' [-Wformat=] ………………
完整log见上面的下载链接
编译成功后打包log:
xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0$ pack --==========-- PACK_CHIP sun20iw1p1 PACK_PLATFORM tina PACK_BOARD d1-nezha PACK_KERN PACK_DEBUG uart0 PACK_SIG none PACK_SECURE none PACK_MODE normal PACK_FUNC android PACK_PROGRAMMER none PACK_TAR_IMAGE none PACK_TOPDIR /home/kunyao/workspace/d_tina_d1_open_v1.0 --==========-- No kernel param, parse it from d1 copying tools file copying configs file storage_type value is 5 rm /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/image/sys_partition_nor.fex rm /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/image/image_nor.cfg copying boot resource LZMA 4.65 : Igor Pavlov : Public domain : 2009-02-03 copying boot file make user resource for : /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/image/sys_partition.fex handle partition user-res no user resource partitions APP_PART_DOWNLOAD_FILE = /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/image/app.fex Need size of filesystem no data resource partitions don't build dtbo ... update_chip pack boot package GetPrivateProfileSection read to end content_count=3 LICHEE_REDUNDANT_ENV_SIZE config in BoardConfig.mk --mkenvimage create redundant env data!-- ---redundant env data size 0x20000--- packing for tina linux normal this is not a partition key gpt_head->header_crc32 = 0x5277aea2 GPT----part num 8--- gpt_entry: 128 gpt_header: 92 GPT:boot-resource: 1f8 2177 GPT:env : 2178 236f GPT:env-redund : 2370 2567 GPT:boot : 2568 761f GPT:rootfs : 7620 11597 GPT:dsp0 : 11598 11987 GPT:recovery : 11988 187c7 GPT:UDISK : 187c8 187d7 update gpt file ok update mbr file ok ==================================== show "sys_partition_for_dragon.fex" message ------------------------------------ [mbr] mbr_size : 252 Kbyte ------------------------------------ partition_name : boot-resource partition_size : 8064 downloadfile : boot-resource.fex boot-resource.fex size : 3.0M byte ------------------------------------ partition_name : env partition_size : 504 downloadfile : env.fex env.fex size : 128K byte ------------------------------------ partition_name : env-redund partition_size : 504 downloadfile : env.fex env.fex size : 128K byte ------------------------------------ partition_name : boot partition_size : 20664 downloadfile : boot.fex boot.fex -> /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/boot.img boot.img size : 9.1M byte ------------------------------------ partition_name : rootfs partition_size : 40824 downloadfile : rootfs.fex rootfs.fex -> /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/rootfs.img rootfs.img size : 16M byte ------------------------------------ partition_name : dsp0 partition_size : 1008 downloadfile : dsp0.fex dsp0.fex size : 258K byte ------------------------------------ partition_name : recovery partition_size : 28224 ------------------------------------ /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/host/bin/ /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/image Begin Parse sys_partion.fex Add partion boot-resource.fex BOOT-RESOURCE_FEX Add partion very boot-resource.fex BOOT-RESOURCE_FEX FilePath: boot-resource.fex FileLength=2f8c00Add partion env.fex ENV_FEX000000000 Add partion very env.fex ENV_FEX000000000 FilePath: env.fex FileLength=20000Add partion env.fex ENV_FEX000000000 Add partion very env.fex ENV_FEX000000000 FilePath: env.fex FileLength=20000Add partion boot.fex BOOT_FEX00000000 Add partion very boot.fex BOOT_FEX00000000 FilePath: boot.fex FileLength=912000Add partion rootfs.fex ROOTFS_FEX000000 Add partion very rootfs.fex ROOTFS_FEX000000 FilePath: rootfs.fex FileLength=fa0000Add partion dsp0.fex DSP0_FEX00000000 Add partion very dsp0.fex DSP0_FEX00000000 FilePath: dsp0.fex FileLength=4059csys_config.fex Len: 0x4ebe config.fex Len: 0x6c00 board.fex Len: 0x400 split_xxxx.fex Len: 0x200 sys_partition.fex Len: 0xbe3 sunxi.fex Len: 0xd400 boot0_nand.fex Len: 0x10000 boot0_sdcard.fex Len: 0x10000 u-boot.fex Len: 0xdc000 u-boot-crash.fex Len: 0x25 toc1.fex Len: 0x8 toc0.fex Len: 0x8 fes1.fex Len: 0xa560 boot_package.fex Len: 0xfc000 usbtool.fex Len: 0x24e00 usbtool_crash.fex Len: 0x1ec00 aultools.fex Len: 0x28a73 aultls32.fex Len: 0x25205 cardtool.fex Len: 0x11e00 cardscript.fex Len: 0x6de sunxi_gpt.fex Len: 0x2000 sunxi_mbr.fex Len: 0x10000 dlinfo.fex Len: 0x4000 arisc.fex Len: 0xf vmlinux.fex Len: 0x8 tinaconf.fex Len: 0xcd00 boot-resource.fex Len: 0x2f8c00 Vboot-resource.fex Len: 0x4 env.fex Len: 0x20000 Venv.fex Len: 0x4 env.fex Len: 0x20000 Venv.fex Len: 0x4 boot.fex Len: 0x912000 Vboot.fex Len: 0x4 rootfs.fex Len: 0xfa0000 Vrootfs.fex Len: 0x4 dsp0.fex Len: 0x4059c Vdsp0.fex Len: 0x4 BuildImg 0 Dragon execute image.cfg SUCCESS ! ----------image is for nand/emmc---------- ----------image is at---------- /home/xiaowenge/workspace/d_tina_d1_open_v1.0/out/d1-nezha/tina_d1-nezha_uart0.img pack finish
我的代码版本是v1.0.1的:
xiaowenge@ubuntu:~/workspace/d_tina_d1_open_v1.0/lichee/linux-5.4$ git log . commit 035e3450a899008ef15bb387d0ed41aafd733a8a (HEAD -> product-smartx-d1-tina-v1.0-release, tag: smartx-d1-tina-v1.0.1-release, tina/product-smartx-d1-tina-v1.0-release, m/master) Author: liwencong <liwencong@allwinnertech.com> Date: Fri May 21 14:01:26 2021 +0800 smartx-d1-tina-v1.0.1-release release commit 9e841db240d4f7161ac1c931bd889dc17eb9b076 (tag: smartx-d1-tina-v1.0.0-release) Author: liwencong <liwencong@allwinnertech.com> Date: Fri Apr 30 19:24:15 2021 +0800 smartx-d1-tina-v1.0.0-release release
-
回复: 【极简操作】使用builroot 2021一键编译生成D1 nezha 系统镜像!
@aldfaaa 有人移了系统,有人做了docker,有人写了文档,感觉没我们全志什么事了
-
回复: 关于D1tina中软件包的想法
@bedrock 适配了,但又不一定适配了。。。有点是在其他全志芯片平台适配了比如r16 r328 r329啥的,但是D1不一定适配了
-
cma扩充和开机logo消失问题分享
在使用的是128M dram的小内存配置,播放视频需要通过ion申请较多的连续物理内存空间,所以需要扩充CMA的大小,否则会导致cma扩充和开机logo消失。
【芯片平台】R311
【软件版本】tina3.5.1
【问题背景】
使用的是128MB的ddr,对于多视频播放和旋转的场景ion的使用非常吃紧,需要想办法扩大cma的大小。
【问题简述】
R311更改cma大小后,出现了不进kernel,开机logo消失等问题。
【问题处理过程】
(1)不进kernel:
更改cma大小为72MB后,系统无法进kernel,撤回修改,查看系统保留内存的分布:root@TinaLinux:/# cat /sys/kernel/debug/memblock/reserved 0: 0x40004000..0x40007fff, size:16K 1: 0x40020000..0x40020fff, size:4K 2: 0x40100000..0x40b480cb, size:10528K 3: 0x41000000..0x4100000b, size:0K 4: 0x43500000..0x4351617f, size:88K 5: 0x43c00000..0x47bfffff, size:65536K 6: 0x47cc8000..0x47f65fff, size:2680K 7: 0x47f7da00..0x47f961ff, size:98K 8: 0x47f9621c..0x47ffefff, size:419K 9: 0x47fff640..0x47fff67b, size:0K 10: 0x47fff680..0x47fff6bb, size:0K 11: 0x47fff6c0..0x47fff737, size:0K 12: 0x47fff740..0x47fff74f, size:0K 13: 0x47fff780..0x47fff78f, size:0K 14: 0x47fff7c0..0x47fff7c3, size:0K 15: 0x47fff800..0x47fff9ad, size:0K 16: 0x47fff9c0..0x47fffb6d, size:0K 17: 0x47fffb80..0x47fffd2d, size:0K 18: 0x47fffd40..0x47fffd43, size:0K 19: 0x47fffd64..0x47fffd81, size:0K 20: 0x47fffd84..0x47fffdb8, size:0K 21: 0x47fffdbc..0x47fffe1c, size:0K 22: 0x47fffe20..0x47fffe70, size:0K 23: 0x47fffe74..0x47ffff06, size:0K 24: 0x47ffff08..0x47ffff22, size:0K 25: 0x47ffff24..0x47ffff3e, size:0K 26: 0x47ffff40..0x47ffff5f, size:0K 27: 0x47ffff64..0x47ffff7e, size:0K 28: 0x47ffff80..0x47ffff8f, size:0K 29: 0x47ffff94..0x47ffffae, size:0K 30: 0x47ffffb0..0x47ffffff, size:0K
发现dts起始地址为0x43500000,cma的下一个保留区域起始地址为0x47cc8000,留给dts和cma的空间只有0x47cc8000-0x43500000约为71MB,cma大小设置为72MB后,超出了范围,导致不进kernel。怎么解决问题?把dts的起始地址往前挪动一下,cma的空间就可以得到扩充,如下所示,把dts的位置向前挪动0x00500000,cma足够容纳72MB的cma保留区域:
include/configs/sunxi-base.h: -#define CONFIG_SUNXI_FDT_ADDR SDRAM_OFFSET(0x03500000) +#define CONFIG_SUNXI_FDT_ADDR SDRAM_OFFSET(0x03000000)
修改后的保留内存的分布如下:
root@TinaLinux:/# cat /sys/kernel/debug/memblock/reserved 0: 0x40004000..0x40007fff, size:16K 1: 0x40020000..0x40020fff, size:4K 2: 0x40100000..0x40b480cb, size:10528K 3: 0x41000000..0x4100000b, size:0K 4: 0x43000000..0x4301617f, size:88K 5: 0x433fffff..0x47bfffff, size:73728K 6: 0x47cc8000..0x47f65fff, size:2680K 7: 0x47f7da00..0x47f961ff, size:98K 8: 0x47f9621c..0x47ffefff, size:419K 9: 0x47fff640..0x47fff67b, size:0K 10: 0x47fff680..0x47fff6bb, size:0K 11: 0x47fff6c0..0x47fff737, size:0K 12: 0x47fff740..0x47fff74f, size:0K 13: 0x47fff780..0x47fff78f, size:0K 14: 0x47fff7c0..0x47fff7c3, size:0K 15: 0x47fff800..0x47fff9ad, size:0K 16: 0x47fff9c0..0x47fffb6d, size:0K 17: 0x47fffb80..0x47fffd2d, size:0K 18: 0x47fffd40..0x47fffd43, size:0K 19: 0x47fffd64..0x47fffd81, size:0K 20: 0x47fffd84..0x47fffdb8, size:0K 21: 0x47fffdbc..0x47fffe1c, size:0K 22: 0x47fffe20..0x47fffe70, size:0K 23: 0x47fffe74..0x47ffff06, size:0K 24: 0x47ffff08..0x47ffff22, size:0K 25: 0x47ffff24..0x47ffff3e, size:0K 26: 0x47ffff40..0x47ffff5f, size:0K 27: 0x47ffff64..0x47ffff7e, size:0K 28: 0x47ffff80..0x47ffff8f, size:0K 29: 0x47ffff94..0x47ffffae, size:0K 30: 0x47ffffb0..0x47ffffff, size:0K
(2)开机logo消失:
开机logo是从uboot解码并显示的,找到logo解码的地方:compress_buf = get_decode_buffer(); if (compress_buf == NULL) { printf("bmp compress_buf empty,quit\n"); set_bmp_decode_flag(BMP_DECODE_FAIL); goto __third_cpu_end; } buf = (unsigned char *)(SUNXI_DISPLAY_FRAME_BUFFER_ADDR + SUNXI_DISPLAY_FRAME_BUFFER_SIZE); ret = sunxi_bmp_decode_from_compress(buf, compress_buf);
发现需要从地址compress_buf把logo的bmp格式数据解压到buf地址,buf地址为SUNXI_DISPLAY_FRAME_BUFFER_ADDR + SUNXI_DISPLAY_FRAME_BUFFER_SIZE,也就是0x47400000。compress_buf的地址如下所示:
if (next_mode == SUNXI_STATE_NORMAL_BOOT) { set_decode_buffer((unsigned char *) (SUNXI_LOGO_COMPRESSED_LOGO_BUFF)); } else if (next_mode == SUNXI_STATE_SHUTDOWN_CHARGE) {
从这里的代码片段知道,logo的原始数据放在地址SUNXI_LOGO_COMPRESSED_LOGO_BUFF,也就是0x43000010,而现在dts的区域的保留区域是( 0x43000000..0x4301617f),刚好覆盖到了SUNXI_LOGO_COMPRESSED_LOGO_BUFF。将SUNXI_LOGO_COMPRESSED_LOGO_BUFF改为0x42000000,这样就能使logo数据不落在内存的保留区域内。 然而编译后再验证,发现logo还是没法显示,从目前得到的信息看不到问题点,说明问题的原因还是没有全部被找到,继续跟进解码数据的过程:
int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize, unsigned char *inStream, SizeT length) { ....... /* Read the uncompressed size */ for (i = 0; i < 8; i++) { unsigned char b = inStream[LZMA_SIZE_OFFSET + i]; if (i < 4) { outSize += (UInt32)(b) << (i * 8); } else { outSizeHigh += (UInt32)(b) << ((i - 4) * 8); } } outSizeFull = (SizeT)outSize; if (sizeof(SizeT) >= 8) { /* * SizeT is a 64 bit uint => We can manage files larger than 4GB! * */ outSizeFull |= (((SizeT)outSizeHigh << 16) << 16); } else if (outSizeHigh != 0 || (UInt32)(SizeT)outSize != outSize) { /* * SizeT is a 32 bit uint => We cannot manage files larger than * 4GB! Assume however that all 0xf values is "unknown size" and * not actually a file of 2^64 bits. * */ if (outSizeHigh != (SizeT)-1 || outSize != (SizeT)-1) { debug ("LZMA: 64bit support not enabled.\n"); return SZ_ERROR_DATA; } } ....... }
如上面代码片段所示,检查*inStream(内存中的bmp数据)前面8位信息的时候,函数报错返回了,这里说明了内存中的bmp数据有问题。bmp数据需要先从flash里面拷贝到内存SUNXI_LOGO_COMPRESSED_LOGO_BUFF中,后面才能从SUNXI_LOGO_COMPRESSED_LOGO_BUFF解码出来 。现数据有异常,需要检查bmp数据从flash拷贝到内存的过程。查找SUNXI_LOGO_COMPRESSED_LOGO_BUFF使用的地方,arch/arm/cpu/armv7/sun8iw15p1/spl/fip_common.c里面有类似从flash拷贝logo数据到内存的代码:
arch/arm/cpu/armv7/sun8iw15p1/spl/fip_common.c: int load_fip(int *use_monitor) { ...... } else if (strncmp(toc1_item->name, ITEM_LOGO_NAME, sizeof(ITEM_LOGO_NAME)) == 0) { *(uint *)(SUNXI_LOGO_COMPRESSED_LOGO_SIZE_ADDR) = toc1_item->data_len; toc1_flash_read(toc1_item->data_offset/512, (toc1_item->data_len+511)/512, (void *)SUNXI_LOGO_COMPRESSED_LOGO_BUFF); } else if (strncmp(toc1_item->name, ITEM_SHUTDOWNCHARGE_LOGO_NAME, sizeof(ITEM_SHUTDOWNCHARGE_LOGO_NAME)) == 0) { ...... }
从这段代码中看不出来有问题,再看看发现编译uboot的时候跟本不会编译到这个文件,怎么回事,询问负责uboot模块的同事得知,这里的文件是给boot0用的,logo数据从flash拷贝到内存的动作也是在boot0的时候做的。所以更新了SUNXI_LOGO_COMPRESSED_LOGO_BUFF的地址,还需要同时编译boot0,这样对于logo数据的拷贝和解码来说,SUNXI_LOGO_COMPRESSED_LOGO_BUFF才是相同的地址。
(文 by. shaokang)