上手体验D1-H_DualDisplay-Devkit
开发套件简介
百问网D1h双屏异显开发套件是采用全志科技首款RISC-V处理器D1-H,该芯片是基于RISC-V指令集的芯片,集成了阿里平头哥64位C906核心,支持RVV,1GHz+主频,可支持Linux、RTOS等系统。同时支持最高4K的H.265/H.264解码,内置一颗HiFi4 DSP,最高可外接2GB DDR3,可以应用于智慧城市、智能汽车、智能商显、智能家电、智能办公和科研教育等多个领域。
评测任务:
1.开发板快速启动等基础使用。
2.关于视频编解码HDMI显示(支持4K)播放视频。
3.关于音频通道的使用和切换,使用XR829的蓝牙,将开发板作为蓝牙音响。
4.使用红外接收控制HDMI显示屏切换LVGL的UI界面。
5.使用WIFI+HDMI实现投屏播放器功能(提供源码)。
6.双屏异显功能,我们可以单独提供MIPI屏幕。
我选择的评测任务是1和6,
评测计划
- 在开发板启动和基础使用阶段开发板启动阶段,我将完成以下工作:
1.1 环境搭建:
了解开发板基本结构,熟悉基本硬件功能,搭建基础编译环境,编译SDK,熟悉烧写工具和烧写步骤。
1.2 uboot执行:
确保uboot可以正常启动,设置启动参数,完成内核的加载。
1.3 内核执行:
在uboot引导下,加载操作系统内核,完成文件系统的解析、设备驱动的加载、动态链接库的加载等操作。
1.4 应用程序启动:
启动测试应用程序,让其开始正常运行。
通过运行一些简单的程序和实验例程来了解开发板的基本能力。在此过程中记录开发中遇到的问题,整理代码和文档。
- 同屏异显功能开发和验证
2.1 了解硬件平台和接口规格:
确定开发板的接口类型和规格。了解CSI和HDMI接口的技术细节,如分辨率、帧率、颜色格式等。
2.2 配置显示接口:
根据硬件规格和需求,配置CSI和HDMI接口的参数,包括分辨率、帧率、颜色格式等,完成设备树的配置。
2.3 开发和调试驱动程序:
开发适配CSI和HDMI接口的设备驱动程序,正确地初始化和配置相应的硬件接口,使用V4L2框架和DRM框架来操作显示器。
2.3 图像数据处理:
完成CSI和HDMI接口的视频显示功能
2.4 双缓冲和显示控制:
实现双缓冲机制来同时管理CSI和HDMI接口的图像数据。
在内存中分配两块缓冲区,分别用于存储CSI接口和HDMI接口的图像数据。
然后,通过显示控制器来动态地切换显示内容,以实现同屏异显的效果。
2.5 调试和优化:
在驱动和显示开发完成后,进行调试和优化,确保同屏异显功能能够稳定可靠地工作。
查找和修复驱动程序或应用程序中的bug,优化图像处理算法以提高性能作。
2.6 集成到应用程序:
将同屏异显功能集成到实际的应用程序中,用开发用户界面(UI)演示交互逻辑,以便方便地使用。在此过程中记录开发中遇到的问题,整理代码和文档。
系统启动
开发板连接如图所示:
上电启动系统
1. 连接串口线
将配套的TypeC线一段连接至开发板的串口/供电接口,另一端连接至电脑USB接口,连接成功后板载的红色电源灯会亮起。 默认情况下系统会自动安装串口设备驱动,如果没有自动安装,可以使用驱动精灵来自动安装。
- 对于Windows系统 此时Windows设备管理器 在 端口(COM和LPT) 处会多出一个串口设备,以
USB-Enhanced-SERIAL CH343(COM4)
开头,需要留意一下后面的具体COM编号,用于后续连接使用。
如上图,COM号是4,我们接下来连接所使用的串口号就是4
2. 打开串口控制台
使用MobaXterm等串口工具来开发板设备。MobaXterm可以通过访问页面 https://mobaxterm.mobatek.net/ 获取 。
使用Mobaxterm登录串口
打开MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示选择端口号(前面设备管理器显示的端口号COM21)、波特率(Speed 115200)、流控(Flow Control: none),最后点击“OK”即可。步骤如下图所示。 注意:流控(Flow Control)一定要选择none,否则你将无法在MobaXterm中向串口输入数据
3. 进入系统shell
使用串口工具成功打开串口后,可以直接按下 Enter 键 进入shell,当然您也可以按下板子上的 Reset
复位键,来查看完整的系统信息。
系统默认的 登录 用户名 是 root 没有密码。
基础使用篇
烧写固件至SPI NAND
注意此方式烧录进的文件系统是只读的,如果操作 需要网络文件系统挂载或者使用TF卡,不推荐使用。
准备工作
- D1-H_DualDisplay-Devkit
- 下载全志线刷工具AllwinnertechPhoeniSuit: https://gitlab.com/dongshanpi/tools/-/raw/main/AllwinnertechPhoeniSuit.zip
- TypeC线 X2
- 下载SPI NAND最小系统镜像:https://gitlab.com/dongshanpi/tools/-/raw/main/tina_d1-h-nezha_uart0.zip
- 下载全志USB烧录驱动:https://gitlab.com/dongshanpi/tools/-/raw/main/AllwinnerUSBFlashDeviceDriver.zip
安装usb驱动
在我们连接好开发板以后,先按住 FEL 烧写模式按键,之后按一下 RESET 系统复位键,就可以自动进入烧写模式。
这时我们可以看到设备管理器 通用串行总线控制器 弹出一个 未知设备 ,这个时候我们就需要把我们提前下载好的 全志USB烧录驱动 进行修改,然后将解压缩过的 全志USB烧录驱动 压缩包,解压缩,可以看到里面有这么几个文件。
InstallUSBDrv.exe
drvinstaller_IA64.exe
drvinstaller_X86.exe
UsbDriver/
drvinstaller_X64.exe
install.bat
对于wind7系统,只需要以管理员 打开 install.bat
脚本,等待安装,在弹出的 是否安装驱动的对话框里面,点击安装即可。
对于wind10/wind11系统,需要在设备管理器里面进行手动安装驱动。
如下图所示,在第一次插入OTG设备,进入烧写模式设备管理器会弹出一个未知设备。
(https://photos.100ask.net/dongshanpi-docs/DongshanNezhaSTU/Windows_FlashDevice_001.png)
接下来鼠标右键点击这个未知设备,在弹出的对话框里, 点击浏览我计算机以查找驱动程序软件。
(https://photos.100ask.net/dongshanpi-docs/DongshanNezhaSTU/Windows_FlashDevice_002.png)
之后在弹出新的对话框里,点击浏览找到我们之前下载好的 usb烧录驱动文件夹内,找到 UsbDriver/
这个目录,并进入,之后点击确定即可。
注意进入到 UsbDriver/
文件夹,然后点击确定,如下图所示。
此时,我们继续点击 下一页 按钮,这时系统就会提示安装一个驱动程序。 在弹出的对话框里,我们点击 始终安装此驱动程序软件 等待安装完成。
安装完成后,会提示,Windows已成功更新你的驱动程序。
最后我们可以看到,设备管理器 里面的未知设备 变成了一个 USB Device(VID_1f3a_efe8)
的设备,这时就表明设备驱动已经安装成功。
运行软件烧写
将下载下来的全志线刷工具 AllwinnertechPhoeniSuit 解压缩,同时将**SPI NAND最小系统镜像**下载下来也进行解压缩。
解压后,得到一个 tina_d1-h-nezha_uart0.img 镜像,是用于烧录到SPI NAND镜像得。另一个是**AllwinnertechPhoeniSuit**文件夹。
首先我们进入到 AllwinnertechPhoeniSuit\AllwinnertechPhoeniSuitRelease20201225 目录下 找到 PhoenixSuit.exe 双击运行。
打开软件后 软件主界面如下图所示
接下来 我们需要切换到 一键刷机**窗口,如下图所示,点击红框标号1,在弹出的新窗口内,我们点击 红框2 **浏览 找到我们刚才解压过的 SPI NAND 最小系统镜像 tina_d1-h-nezha_uart0.img ,选中镜像后,点击红框3 全盘擦除升级 ,最后点击红框4 立即升级。
点击完成后,不需要理会 弹出的信息,这时 我们拿起已经连接好的开发板,先按住 FEL 烧写模式按键,之后按一下 RESET 系统复位键,就可以自动进入烧写模式并开始烧写。
烧写时会提示烧写进度条,烧写完成后 开发板会自己重启。
启动系统
一般情况下,烧写成功后 都会自动重启 启动系统,此时我们进入到 串口终端,可以看到它的启动信息,等所有启动信息加载完成,按enter键即可登录烧写好的系统内。
启动后系统的用lv_example 0测试mipi屏幕,效果如图所示:
使用 adb
在window10平台使用adb
ADB (Android Debug Bridge) 是一个通用命令行工具,它允许用户与连接的Android设备进行通信。现在很多linux系统也集成了adb服务,可以用来与linux设备通信。
使用百问网提供的adb工具,解压缩,去除文件夹中文,添加到环境变量中
进入adb shell
打开cmd,输入 adb devices
出现以下错误:
说明开发板的adbd服务没有启动,在开发板串口中输入;
adbd &
再次在cmd中输入adb devices
这时已经连接到开发板的adb服务器
进入shell,在cmd中输入adb shell
此时已经进入开发板的shell登录
使用adb传输文件
使用ADB,可以通过以下命令将文件从计算机传输到开发板,或者从开发板传输到计算机:
- 将文件从计算机传输到Android设备:
adb push <本地路径> <远程路径>
例如,将本地文件file.txt
传输到开发板的`/root目录,可以使用以下命令:
adb push file.txt /root
- 将文件从Android设备传输到计算机:
adb pull <远程路径> <本地路径>
例如,将开发板的/root/file.txt
的文件传输到本地计算机的,可以使用以下命令:
adb pull /root/file.txt .
在ubuntu14.04平台使用adb
将usb otag连接到虚拟机ubuntu14.04
安装adb工具
sudo apt-get install android-tools-adb
adb shell
adb shell
error: insufficient permissions for device
表示缺少合适的权限,需要配置
解决方法:
-
添加用户到plugdev组
sudo usermod -a -G plugdev $USER
-
添加udev规则
创建一个udev规则文件来允许adb设备被正确识别。在创建一个文件在
/etc/udev/rules.d/
目录下创建51-android.rules
,并添加如下内容SUBSYSTEM=="usb", ATTR{idVendor}=="[Vendor ID]", MODE="0666", GROUP="plugdev"
其中Vendor ID可以通过lsusb查看,lsusb
lsusb Bus 002 Device 003: ID 18d1:d002 Google Inc.
18d1:d002即为[Vendor ID],填入即可
编译Tina
开发环境搭建
嵌入式产品开发流程中,通常有两个关键的步骤,编译源码与烧写固件。源码编译需要先准备 好编译环境,而固件烧写则需要厂家提供专用烧写工具。本文主要介绍如何搭建环境来实现Tina sdk的编译和打包。
一个典型的嵌入式开发环境包括本地开发主机和目标硬件板:
- 本地开发主机作为编译服务器,需要提供linux操作环境,建立交叉编译环境,为软件开发提供 代码更新下载,代码交叉编译服务。
- 本地开发主机通过串口或USB与目标硬件板连接,可将编译后的镜像文件烧写到目标硬件板, 并调试系统或应用程序。
编译环境
开发主机和系统:i9-10900k ubuntu14.04
依赖包安装
sudo apt-get update
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y
解压SDK
百问网提供的未解压的sdk包
tina-d1-h.tar.bz2.00
tina-d1-h.tar.bz2.01
tina-d1-h.tar.bz2.02
tina-d1-h.tar.bz2.03
tina-d1-h.tar.bz2.04
tina-d1-h.tar.bz2.05
tina-d1-h.tar.bz2.06
tina-d1-h.tar.bz2.07
tina-d1-h.tar.bz2.08
解压:
cat tina-d1-h.tar.bz2.* | tar -jxv
解压后的文件:
SDK结构
Tina Linux 基于 openwrt-14.07 版本的
Tina-SDK/
├── build # 构建系统文件
├── config # 配置菜单的界面以及一些固定的配置项,该配置菜单基于内核的 mconf 规格编写
├── Config.in # 菜单项配置文件。和 make menuconfig 相关联的文件
├── device # 用于存放方案的配置文件,包括内核配置、env 配置、分区表配置、sys_config.fex(全志定制板级配置文件)、board.dts(linux标准设备树文件) 等
├── dl # 软件包文件
├── lichee # 存放 bootloader、linux内核、DSP等代码
├── Makefile # 在顶层目录执行 make 命令的入口文件
├── out # 编译相关的临时文件和最终镜像文件 ,编译后自动生成此目录
├── package # 存放Tina系统支持的软件包源码和编译规则
├── prebuilt # 存放预编译交叉编译器
├── rules.mk # 定义了 Makefile 中使用的一些通用变量和函数
├── scripts # 存放host端(PC端,下同)或target端(小机端,即目标机器,下同)使用的一些脚本
├── target # 存放目标板相关的配置以及sdk和toolchain生成的规格
├── tmp # 临时文件夹。编译过程中的临时文件保存。
├── toolchain # 交叉工具链构建配置、规则
└── tools # 存放 host 端工具的编译规则
编译
#获取环境变量
source build/envsetup.sh
Setup env done! Please run lunch next.
#选择方案
lunch
You're building on Linux
Lunch menu... pick a combo:
1. d1-h_nezha_min-tina
2. d1-h_nezha-tina
3. d1s_nezha-tina
Which would you like?: 2
============================================
TINA_BUILD_TOP=/home/ccdroid/d1h/tina-d1-h
TINA_TARGET_ARCH=riscv
TARGET_PRODUCT=d1-h_nezha
TARGET_PLATFORM=d1-h
TARGET_BOARD=d1-h-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
============================================
no buildserver to clean
[1] 37218
#编译
make -j32
#打包
pack
/home/ccdroid/d1h/tina-d1-h/out/d1-h-nezha/tina_d1-h-nezha_uart0.img
编译完成后的目录结构
将生成的tina_d1-h-nezha_uart0.img 烧写到开发板,进一步开发测试
单独编译命令
# 单独编译boot0和uboot:(可在Tina任意目录下使用)
mboot
# 单独编译boot0:(可在Tina任意目录下使用)
mboot0
# 单独编译uboot:(可在Tina任意目录下使用)
muboot
# 单独编译内核:(可在Tina任意目录下使用)
mkernel
# 单独编译某个包:(只能在编译的包路径下操作)
# 如包路径为 tina/package/utils/rwcheck,则需要进入到 tina/package/utils/rwcheck路径下再输入 mm 命令,
# 编译出来对应的安装包的路径在 tina/out/d1h/packages/base下
mm
# 在根目录下编译某个软件包:(需要在根目录下操作)
make <应用包的路径>/install # 如 make package/utils/rwcheck/install
# 在根目录下清空应用包临时文件:(需要在根目录下操作)
make <应用包的路径>/clean # 如 make package/utils/rwcheck/clean
环境配置
Samba服务器
安装samba
sudo apt-update
sudo apt-get install samba
配置Samba共享
编辑Samba配置文件/etc/samba/smb.conf,在文件末尾添加以下内容,配置一个共享目录(例如[share])
sudo vim /etc/samba/smb.conf
[share]
path = /path/to/share
read only = no
browsable = yes
#不用登陆账号和密码
guest ok = yes
将/path/to/share替换为想要共享的实际目录路径。
设置Samba密码
sudo smbpasswd -a your_username
替换your_username为实际用户名。
重启Samba服务
sudo service smbd restart
权限设置允许Samba访问。
sudo chown nobody:nogroup /path/to/share
sudo chmod 775 /path/to/share
sudo ufw allow samba
NFS服务
嵌入式Linux开发中,会经常使用NFS,目标系统通常作为NFS客户机使用,Linux主机作为NFS服务器。在目标系统上通过NFS,将服务器的NFS共享目录挂载到本地,可以直接运行服务器上的文件。在调试系统驱动模块以及应用程序,NFS都是十分必要的,并且Linux还支持NFS根文件系统,能直接从远程NFSroot启动系统,这对嵌入式Linux根文件系统裁剪和集成也是十分有必要的。
安装NFS服务程序
sudo apt-get install nfs-kernel-server
配置 NFS 文件系统服务
vim /etc/exports
/home/ccdroid *(rw,sync,no_root_squash,no_all_squash)
启动NFS服务
sudo service nfs-kernel-server restart
开发板验证NFS服务器是否可用
mount -t nfs 192.168.6.140:/home/ccdroid /mnt -o nolock
ls /mnt
umount /mnt/
挂载成功后,可以在开发板的/mnt目录下看到NFS服务器上的文件。
网络篇
配置wifi
编译支持xr829
make kernel_menuconfig
make menuconfig
make -j16
pack
make kernel_menuconfig
make menuconfig
加载ko失败
[12687.826918] [XRADIO_ERR] sbus_sdio_init failed
[12687.833418] xradio_core_init failed (-110)!
[12687.842196] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
[12687.875076] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 52, RTO !!
[12687.883284] sunxi-mmc 4021000.sdmmc: smc 1 p1 err, cmd 52, RTO !!
[12687.890249] sunxi-mmc 4021000.sdmmc: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B
failed to insert xr829.ko
解决方案:
设备树board.dts的569行改成PB12
menuconfig里面的XR829 40M的选项都改成XR829
WiFi的连接
查看wifi规格
支持2.4G wifi,支持13个工作信道(Channel1-13),提供wifi扫描命令,可搜索到附件的wifi list。
执行:
wifi_scan_results_test
可以看到:
root@TinaLinux:/# wifi_scan_results_test
*********************************
***Start scan!***
*********************************
bssid / frequency / signal level / flags / ssid
0e:e0:df:1e:6a:36 2472 -39 [WPA2-PSK-CCMP][ESS] RANDOLPH
******************************
Wifi get_scan_results: Success!
******************************
station模式
开机时如检测到曾经连接过wifi,则自动连接上一此连接的wifi。
执行:
#扫描SSID
iw wlan0 scan | grep SSID
#连接wifi
wifi_connect_ap_test <ssid> <psk>
ping百度验证:
root@TinaLinux:/# ping baidu.com
PING baidu.com (220.181.38.148): 56 data bytes
64 bytes from 220.181.38.148: seq=0 ttl=50 time=84.309 ms
64 bytes from 220.181.38.148: seq=1 ttl=50 time=75.818 ms
64 bytes from 220.181.38.148: seq=2 ttl=50 time=69.916 ms
64 bytes from 220.181.38.148: seq=3 ttl=50 time=71.139 ms
64 bytes from 220.181.38.148: seq=4 ttl=50 time=102.807 ms
^C
--- baidu.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 69.916/80.797/102.807 ms
修改 wifi 热点配置自动连接wifi
package/allwinner/wifimanager/files/wpa_supplicant_overlay.conf
disable_scan_offload=1
#添加wifi连接信息
network={
ssid="xxx"
psk="xxx"
}
进入系统后获取ip
udhcpc -i wlan0
添加脚本wlan0自动获取ip
添加启动脚本:
- 在源码树中,
package/base-files/files
目录下包含了系统的一些基础文件。 - 可以在这个目录下添加你的启动脚本,例如创建一个名为
/etc/init.d/S98udhcpc
的文件。
vim package/base-files/files/etc/init.d/udhcpc
#!/bin/sh /etc/rc.common
START=98
STOP=98
DEPEND=done
PROG=udhcpc
start() {
$PROG -i wlan0 &
}
stop() {
$PROG --release
}
chmod +x udhcpc
更新/etc/rc.d
:
- 为了让脚本在启动时被执行,需要在
package/base-files/files/etc/rc.d
目录下创建一个符号链接或者添加一个启动脚本的调用。
开启openssh-server
配置menuconfig
编译
make -j16
pack
烧写
开放sshd的22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
firewall编译错误
error: ‘%u’ directive writing between 1 and 10 bytes into a region of size between 7 and 11 [-Werror=format-overflow=]
vim out/d1-h-nezha/compile_dir/target/firewall-2016-01-29/redirects.c
357: ccdroid
out/d1-h-nezha/compile_dir/target/firewall-2016-01-29/iptables.c:
858 ccdroid
out/d1-h-nezha/compile_dir/target/rpcd/session.c
ccdroid
显示和视频篇
4寸 tft08086 MIPI显示屏驱动适配
Linux 提供了一套完整的屏幕驱动,支持 RGB,MIPI,DSI,eDP,LVDS,E-INK屏幕,也支持低分辨率的 SPI,IIC 屏幕。具体屏幕的驱动情况,需要根据芯片而确定。本文将通过介绍 D1-H Kernel 中的 LCD 驱动,讲解配置屏幕驱动的基本方法。
LCD 的驱动框架
显示驱动可划分为三个层面:驱动层,框架层及底层。底层与图形硬件相接,主要负责将上层配置的功能参数转换成硬件所需要的参数,并配置到相应寄存器中。
显示框架层对底层进行抽象封装成一个个的功能模块。
驱动层对外封装功能接口,通过内核向用户空间提供相应的设备结点及统一的接口。
在驱动层,分为三个驱动,分别是framebuffer驱动,display驱动,LCD&HDMI驱动。
- framebuffer 驱动与 framebuffer core 对接,实现 linux 标准的framebuffer 接口。
- display驱动是整个显示驱动中的核心驱动模块,所有的接口都由 display 驱动来提供,包括 lcd 的接口。
- LCD&HDMI驱动是具体的LCD屏幕和标准HDMI的具体驱动
Uboot 配置
对于 U-Boot 平台,一般直接修改 config 文件,位于
lichee/brandy-2.0/u-boot-2018/configs/sun20iw1p1_defconfig
其中的sun20iw1p1是芯片的软件代号。可以在 BoardConfig.mk 文件里找到。D1-H 芯片的 BoardConfig.mk 文件,位于:
device/config/chips/d1-h/configs/default/BoardConfig.mk
打开 BoardConfig.mk 配置文件
可以看到这颗芯片使用的是 sun20iw1p1_defconfig 这个配置文件。可以在 U-Boot 的 config 文件夹找到这个配置文件。
ls lichee/brandy-2.0/u-boot-2018/configs/
configs.tar sun20iw1p1_defconfig sun20iw1p1_nor_defconfig
在sun20iw1p1_defconfig文件
SUNXI LOGO DISPLAY 是DISP 驱动部分
主要部分如下:
CONFIG_CMD_SUNXI_BMP=y # 开机 LOGO BMP 文件解析器
CONFIG_LZMA=y # 开机 LOGO 使用 LZMA 压缩解压工具
CONFIG_DISP2_SUNXI=y # DISP 驱动
CONFIG_HDMI2_DISP2_SUNXI=y # HDMI DISP 驱动
CONFIG_AW_PHY=y # DISP 驱动使用的是全志自研外设
-
关闭 U-Boot 的 LCD DISP 驱动输出,注释掉 CONFIG_DISP2_SUNXI=y 这一行
-
关闭 HDMI DISP 驱动输出,注释掉 CONFIG_HDMI2_DISP2_SUNXI=y 这一行
LCD屏幕配置部分
vim device/config/chips/d1-h/configs/nezha/board.dts
vim lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi
echo 1 > /sys/class/disp/disp/attr/colorbar
./dtc -I dtb -O dts -o fdt-new.dts fdt-new.dtb
cd lichee/linux-5.4/scripts/dtc
/home/ccdroid/d1h/tina-d1-h/out/d1-h-nezha
屏幕操作
调整LCD背光亮度
mount -t debugfs none /sys/kernel/debug
echo lcd0 > /sys/kernel/debug/dispdbg/name
echo setbl > /sys/kernel/debug/dispdbg/command
echo 100 > /sys/kernel/debug/dispdbg/param
echo 1 > start
亮度 0 - 255 写入 param, 0最亮, 255最暗。
默认显示输出改成HDMI
在tina目录下修改下面两个文件
#disp节点
vim device/config/chips/d1-h/configs/nezha/uboot-board.dts
vim device/config/chips/d1-h/configs/nezha/linux-5.4/board.dts
screen0_output_type = <3>;
screen0_output_mode = <10>;
screen1_output_type = <1>;
screen1_output_mode = <4>;
dev0_output_type = <4>;
dev0_output_mode = <10>;
dev0_do_hpd = <1>;
因为单独make编译的时候默认是不编译uboot的 所以要先编译一遍uboot
使用此命令进入进入uboot路径
cboot
单独编译uboot 编完uboot文件会自动复制到方案下
muboot
回到tina目录
cd ../../../
重新编译
make -j64
把logo文件复制到以下路径 logo在原文下载
cp bootlogo.bmp device/config/chips/d1-h/boot-resource/boot-resource/bat/bootlogo.bmp
cp bootlogo.bmp device/config/chips/d1-h/boot-resource/boot-resource/bootlogo.bmp
cp bootlogo.bmp device/config/chips/d1-h/configs/nezha/configs/bootlogo.bmp
如果没做这步那么开机的时候会绿屏
最后打包
pack
烧录完后启动系统 就能发现HDMI上显示出了logo
双屏异显
实验目标:在hdmi和mipi屏幕同时显示图像
修改 libuapi 库
vim d1-tina-open/package/allwinner/libuapi/src/videoOutPort.c
# 调转一下默认屏幕输出
+#define SCREEN_0 1
+#define SCREEN_1 0
#重新编译打包 烧录
make -j32 && pack
测试
- hdmi屏幕显示
echo 1 > /sys/class/disp/disp/attr/colorbar
cat /sys/devices/virtual/disp/disp/attr/sys
screen 0:
de_rate 300000000 hz, ref_fps:60
mgr0: 1920x1080 fmt[yuv444] cs[0x101] range[limit] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
dmabuf: cache[0] cache max[0] umap skip[0] umap skip max[4]
hdmi output mode(10) fps:60.6 1920x1080
err:0 skip:45 irq:28591 vsync:0 vsync_skip:0
BUF enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[ 0] fb[1920,1080;1920,1080;1920,1080] crop[ 0, 0,1920,1080] frame[ 0, 0,1920,1080] addr[ff000000, 0, 0] flags[0x 0] trd[0,0]
此时已经创建了screen0,并且在hdmi中显示出了colorbar-1
- mipi屏幕显示
cd /sys/kernel/debug/dispdbg
echo disp0 > name; echo switch1 > command; echo 1 4 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start;
echo 1 > /sys/class/disp/disp/attr/colorbar
实验结果如下
由于tina2在图像显示方面存在问题,暂不测试视频和图像同时显示功能