
baiwen 发布的帖子
-
韦东山 全志T113s3 PRO V1.3来啦!
完全兼容V1.2版本软硬件+文档 视频教程,另外在此基础上,新增了 RS485 CAN2.0 TVIN 输入 TVOUT输出等接口,同时我们提供了 SD-NAND 4GB 大容量类EMMC版本 + WIFI6 + BT5无线 模块支持!
-
回复: t113(tina)加入paha.mqtt.c库,编译成固件烧录到板子上后报错找不到动态库
我也遇到了编译QT5 无法打包所有qt so库的情况。
经过调试发现
是最后打包制作 rootfs.img 时 自动将 脚本认为无用的 文件资源 库 给移除掉了。所以导致最终目标系统没有包含进去。
源码 build 目录 找到 reduce-rootfs-size.sh 脚本
找到 downsize_rootfs 函数,注释掉里面的几个 remove函数具体打包无效原因在。
-
请问如何在D1-h上同时驱动MIPIDSI + HDMI实现双屏异显!
参考大佬 https://bbs.aw-ol.com/topic/362/diy教程-d1的双屏异显第一弹来啦-d1同时支持两个屏幕-一共做ui交互-一边个播放视频?_=1713492912563
帖子,
尝试去做实验,
发现修改 libuapi 库,videoOutPort.c 文件 SCREEN_0 为1 ,
通过 tplayerdemo播放视频,HDMI无任何输出,
但是通过 colorbar 调试,两边是可以显示不同的画面。
如果不修改 videoOutPort.c 文件 SCREEN_0 为1 ,则MIPI DSI可以正常播放视频。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 cd /sys/kernel/debug/dispdbg echo disp1 > name; echo switch1 > command; echo 4 10 0 0 0x4 0x101 0 0 0 8 > param; echo 1 > start; cat /sys/devices/virtual/disp/disp/attr/sys 考官方文档截屏,导出的图像是正常的 echo 0 > /sys/class/disp/disp/attr/disp echo /data/filename.bmp > /sys/class/disp/disp/attr/capture_dump 使用colorbar,显示不正常 echo 0 > /sys/class/disp/disp/attr/disp echo 1 > /sys/class/disp/disp/attr/colorbar echo 1 > /sys/class/disp/disp/attr/disp echo 3 > /sys/class/disp/disp/attr/colorbar 重新对LCD初始化就正常了。 mount -t debugfs none /sys/kernel/debug; cd /sys/kernel/debug/dispdbg; echo suspend > command; echo disp0 > name; echo 1 > start echo resume > command; echo disp0 > name; echo 1 > start
目前认为是是 硬件部分 没问题,两个图层已经创建,单独 MIPI DSI 运行LVGL示例没问题,但是Tplayerdemo在调取disp图层 播放视频时无法从 hdmi 输出,有没有比较了解的大佬指点一二?
不胜感激! -
回复: 求教使用百问网v851s的sdk打包问题!
@awwwwa
可以参考 编译步骤
https://dongshanpi.com/YuzukiHD-Lizard/07-TinaSDK_DevelopmentGuide/
重新 拉取 SDK Lizard 扩展补丁包
覆盖
-
回复: V851S上的ISP真的坏了吗?
@kanken6174 非常抱歉,给您带来了 不好的体验, V851S商品没有下架,平台最近对认证有着非常严格的要求,导致我们的商品无法在 欧盟地区 售卖。
有相关问题,可以 发 邮件到 support@100ask.net
我们会单独处理。
-
基于LVGL编写的windows串口工具: LCOM
LCOM: Serial Port Tools based on LVGL (PC Software)
一直以来我都想用LVGL做一个真正意义上的PC软件,来验证或者表达LVGL出色的特性,现在我用LCOM做到了!
LCOM 是一个基于LVGL编写的串口工具,界面简洁,功能出色,并且上手简单。
LCOM的一些功能包括:
- 以HEX或ASCII格式发送和接收数据。
- 实时刷新COM端口列表。可设置COM端口的连接参数包括波特率、奇偶校验、数据位、停止位和流控。
- 支持定时发送
- 支持换行发送(CR、LR、CRLF)
- 多种字符编码格式支持,比如 ASII,GBK(Chinese),UTF-8,UTF-16 等
- Modbus模式支持(为百问网STM32H5 modbus解决方案准备(学习教程))
- 界面多语言支持
- 多条字符串发送
- 自动保存设置(退出保存)
- 串口自动检测,支持记住上次使用的串口号
- 串口断线自动重连
- TCP/UDP 支持,包括客户端和服务端模式支持
- 自定义主题
- More todo
演示视频:https://www.bilibili.com/video/BV1bK4y1z7se
Get LCOM
- GitHub: https://github.com/100askTeam/LCOM/releases
- Gitee:https://gitee.com/weidongshan/LCOM/releases
Source code
Not yet open source (soon)
Issues
-
回复: V851SE TinyVision地表最帅AI开发板来了! @yuzukihd
@baiwen 使用tina-sdk 4.0 启动 提示 ERROR: reserving fdt memory region failed (addr=41f12000 size=384000)
有问题固件
tina_v851se-tinyvision_uart0_kernel-error.zipsd线刷
330db410-2984-48f5-8b60-ad3b94fe6689-sd-tina_v851se-tinyvision_uart0.zipenv.cfg
ubuntu@ubuntu1804:~/Downloads/tina-v851/device/config/chips/v851se/configs/default$ cat env.cfg #kernel command arguments earlyprintk=sunxi-uart,0x02500000 initcall_debug=0 console=ttyS0,115200 nand_root=ubi0_4 mmc_root=/dev/mmcblk0p4 nor_root=/dev/mtdblock1 init=/init loglevel=8 coherent_pool=16K #reserve_list=30M@64M,78M@128M,200M@512M mac= wifi_mac= bt_mac= specialstr= root_partition=rootfs mtd_name=sys rootfstype=ubifs, rw #set kernel cmdline if boot.img or recovery.img has no cmdline we will use this setargs_nor=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nor_root} rootwait init=${init} rdinit=${rdinit} partitions=${partitions} cma=${cma} coherent_pool=${coherent_pool} ion_carveout_list=${reserve_list} setargs_nand=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} ubi.mtd=${mtd_name} root=${nand_root} rootfstype=${rootfstype} rootwait init=${init} rdinit=${rdinit} partitions=${partitions} cma=${cma} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} selinux=${selinux} specialstr=${specialstr} coherent_pool=${coherent_pool} ion_carveout_list=${reserve_list} setargs_nand_ubi=setenv bootargs ubi.mtd=${mtd_name} earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${nand_root} rootfstype=${rootfstype} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1 setargs_mmc=setenv bootargs earlyprintk=${earlyprintk} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} rootwait init=${init} partitions=${partitions} cma=${cma} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} selinux=${selinux} specialstr=${specialstr} coherent_pool=${coherent_pool} ion_carveout_list=${reserve_list} #nand command syntax: sunxi_flash read address partition_name read_bytes #0x4007f800 = 0x40080000(kernel entry) - 0x800(boot.img header 2k) boot_partition=boot boot_normal=sunxi_flash read 44800000 ${boot_partition};bootm 44800000 boot_recovery=sunxi_flash read 44800000 extend;bootm 44800000 boot_fastboot=fastboot #recovery key recovery_key_value_max=0x13 recovery_key_value_min=0x10 #fastboot key fastboot_key_value_max=0x8 fastboot_key_value_min=0x2 #uboot system env config bootdelay=1 #default bootcmd, will change at runtime according to key press bootcmd=run setargs_nand boot_normal#default nand boot #verify the kernel verify=N
-
R128入门视频教程来啦!
视频观看地址:https://www.bilibili.com/video/BV1oC4y1w7AH
获取全志R128开发板:https://item.taobao.com/item.htm?id=736154682975
学习QQ群:318160957 -
回复: 【R128学习案例】R128平衡小车
@wj8331585 在 【R128学习案例】R128平衡小车 中说:
我这咋什么都没显示出来。
那应该是你的网络问题,我用手机也能预览,如果一直无法查看视频,可以去b站观看:https://www.bilibili.com/video/BV1Fg4y197Vh
-
回复: R128适配SPI LCD+LVGL
这是我的一些笔记:
所使用的补丁:spilcd2.0.zip
 修改默认clk /home/book/work/allwinner/R128-FreeRTOS/lichee/rtos-hal/hal/source/spi/common_spi.h #define SPI_MOD_CLK 40000000 /* sample mode frequency */
修改调试等级
/home/book/work/allwinner/R128-FreeRTOS/lichee/rtos-hal/hal/source/spi/hal_spi.c #define SPI_INFO_LEVEL #define SPI_DATA_LEVEL #define SPI_DUMPREG_LEVEL
修改默认DMA buffer size
/home/book/work/allwinner/R128-FreeRTOS/lichee/rtos-hal/include/hal/sunxi_hal_spi.h //#define ALIGN_DMA_BUF_SIZE (4096 + 64) #ifdef CONFIG_USE_100ASK_DISPLAY_SCREEN_240X240 #define ALIGN_DMA_BUF_SIZE ((240*240*4) + 64) #elif CONFIG_USE_100ASK_DISPLAY_SCREEN_320X480 #define ALIGN_DMA_BUF_SIZE ((320*480*4) + 64) #else #define ALIGN_DMA_BUF_SIZE (4096 + 64) #endif
修改SPI引脚配置
/home/book/work/allwinner/R128-FreeRTOS/lichee/rtos-hal/hal/source/spi/platform/spi_sun20iw2.h #define SPI1_PARAMS \ { .port = 1, \ .reg_base = SUNXI_SPI1_PBASE, .irq_num = SUNXI_IRQ_SPI1, .gpio_num = 3, \ .pclk_pll_type = HAL_SUNXI_AON_CCU, .pclk_pll_id = CLK_DEVICE, \ .pclk_hosc_type = HAL_SUNXI_AON_CCU, .pclk_hosc_id = CLK_HOSC, \ .bus_type = HAL_SUNXI_CCU, .bus_id = CLK_BUS_SPI1, \ .mclk_type = HAL_SUNXI_CCU, .mclk_id = CLK_SPI1, \ .reset_type = HAL_SUNXI_RESET, .reset_id = RST_SPI1, \ .gpio_clk = GPIOA(13), .gpio_mosi = GPIOA(18), .gpio_miso = -1, \ .gpio_cs0 = GPIOA(12), .gpio_wp = -1, .gpio_hold = -1, \ .mux = 6, .driv_level = GPIO_DRIVING_LEVEL2, \ }
注释SUPPORT_DBI_IF
/home/book/work/allwinner/R128-FreeRTOS/lichee/rtos-hal/hal/source/spilcd/lcd_fb/lcd_fb_feature.h #if defined (CONFIG_ARCH_SUN50IW11) || defined(CONFIG_ARCH_SUN8IW20) || defined(CONFIG_ARCH_SUN20IW1) \ || defined(CONFIG_ARCH_SUN20IW2) //#define SUPPORT_DBI_IF #endif
sys_config.fex配置
/home/book/work/allwinner/R128-FreeRTOS/board/r128s2/pro/configs/sys_config.fex ;---------------------------------------------------------------------------------- ;SPI controller configuration ;---------------------------------------------------------------------------------- ;Please config spi in dts [spi1] spi1_used = 1 spi1_cs_number = 1 spi1_cs_bitmap = 1 spi1_cs0 = port:PA12<6><0><3><default> spi1_sclk = port:PA13<6><0><3><default> spi1_mosi = port:PA18<6><0><3><default> spi1_miso = port:PA21<6><0><3><default> ;spi1_hold = port:PA19<6><0><2><default> ;spi1_wp = port:PA20<6><0><2><default> [pwm6] pwm_used = 1 pwm_positive = port:PA26<4><0><3><default> ;---------------------------------------------------------------------------------- ;lcd_fb0 configuration ;---------------------------------------------------------------------------------- [lcd_fb0] lcd_used = 1 lcd_model_name = "spilcd" lcd_driver_name = "lcd_100ask_240x240" lcd_x = 240 lcd_y = 240 lcd_width = 28 lcd_height = 28 lcd_data_speed = 40 lcd_pwm_used = 1 lcd_pwm_ch = 6 lcd_pwm_freq = 5000 lcd_pwm_pol = 0 lcd_if = 0 lcd_pixel_fmt = 11 lcd_dbi_fmt = 2 lcd_dbi_clk_mode = 1 lcd_dbi_te = 1 fb_buffer_num = 2 lcd_dbi_if = 4 lcd_rgb_order = 0 lcd_fps = 10 lcd_spi_bus_num = 1 lcd_frm = 2 lcd_gamma_en = 1 lcd_backlight = 100 lcd_power_num = 0 lcd_gpio_regu_num = 0 lcd_bl_percent_num = 0 lcd_spi_dc_pin = port:PA19<1><0><3><0> ;lcd_gpio_0 = port:PA12<1><0><2><0>
-
【R128学习案例】R128平衡小车
R128是一颗专为“音视频解码”而打造的全新高集成度 SoC,主要应用于智能物联和专用语音交互处理解决方案。
如果做一台能通过发挥R128的wifi&蓝牙特性的平衡小车,从而能通过wifi或蓝牙连接的方式进行控制,那将会是非常有趣的项目!
但是我们还有一个计划,那就是发挥R128的音频处理单元功能,从而能通过语音识别进行控制。试想一下,我们可以动动嘴就能操控小车,这样项目将会更有趣!我们将这个项目命名为: B_ROBOT_100ASK
项目代码及模型文件将会上传到git仓库:- Gitee: https://gitee.com/weidongshan/100ask_r128_demos
- GitHub: https://github.com/100askTeam/100ask_r128_demos
使用的R128硬件(淘宝购买链接):
文档教程阅读地址:
功能特性:
自平衡功能
WiFI控制功能(微信小程序或手机APP)
蓝牙控制功能(微信小程序或手机APP)
语音控制功能最后,希望大家喜欢这个项目,在边玩边学习的同时收获到有用的知识!
-
百问网 哪吒D1-H 双屏异显项目板来啦!!!
您还在为拿到D1-H不知道可以做什么而苦恼么?
您还在为拿到D1-H不知道学什么而苦恼么?
您的D1-H板还在吃灰么?
这次我们专门针对于D1-H的显示特性,推出了首款D1-H项目板,专门用来学习 双屏异显项目,提供深入的MPP开发教程,显示接口开发教程等,欢迎大家了解! -
回复: 万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的图我们赠送 R128 DevKit板+U盘资料!
@baiwen
某位不知名大佬 YuzukiHD 推荐参考这种风格
-
万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的图我们赠送 R128 DevKit板+U盘资料!
万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的表达图 我们将赠送 R128 DevKit板+U盘资料(价值至少300RMB)!
-
回复: 编译buildroot,编译出来的程序没法放到T113上运行。
@shz18877605430 先确认一下T113上使用的 工具链类型是什么,是否有硬浮点支持,还是使用musl C库,如果一致,确认一下 你编译的这个程序是否有相应的 .so 动态库/依赖需要配合着 才能运行!
-
回复: SDK 如何下载
参考阿志的SDK教程 ttps://d1.docs.aw-ol.com/study/study_3getsdktoc/
另外建议您放一下出错的截图信息,方便分析 解决问题! -
回复: 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT
千呼万唤始出来,前前后后多次改版,多次测验,终于可以上架了,感兴趣的小伙伴 可以优先体验,凭 aw-ol.com账号截图,可以减免 8 元 运费哦! 限量100pcs.
https://item.taobao.com/item.htm?&id=736154682975 -
ubuntu 18编译 R818 TinaSDK 2.0 ROS包,提示 host python 错误,有遇到过的同学么?
参考下图配置,使用ubuntu 18环境,尝试 安装了 python pip对应包,解决,发现问题依旧存在,
目前认为是 host端 python存在不兼容问题导致,现尝试更换到Ubuntu 20看是否可以解决
make[3]: Entering directory '/home/book/R818/sdk/r818-tina-sdk/package/lang/python-dateutil' ************** host do not need to execute install ************** if [ "HOST" == "HOST" ]; then export PYTHONPATH="/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7:/home/book/R818/sdk/r818-tina-sdk/out/host//lib/python2.7/site-packages"; export PYTHONDONTWRITEBYTECODE=0; else export PYTHONPATH="/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/staging_dir/target/usr/lib/python2.7:/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/staging_dir/target//usr/lib/python2.7/site-packages:/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/compile_dir/target/python-dateutil-2.7.5/ipkg-install//usr/lib/python2.7/site-packages"; export PYTHONDONTWRITEBYTECODE=1; export _python_sysroot="/home/book/R818/sdk/r818-tina-sdk/out"; export _python_prefix="/usr"; export _python_exec_prefix="/usr"; fi; export PYTHONOPTIMIZE=""; cd /home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/compile_dir/target/host/python-dateutil-2.7.5/; CC="gcc" CCSHARED="gcc -fPIC" CXX="g++" LD="gcc" LDSHARED="gcc -shared" CFLAGS="-O2 -I/home/book/R818/sdk/r818-tina-sdk/out/host/include -I/home/book/R818/sdk/r818-tina-sdk/out/host/usr/include -I/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/staging_dir/target/host/include" CPPFLAGS="-I/home/book/R818/sdk/r818-tina-sdk/out/host/include -I/home/book/R818/sdk/r818-tina-sdk/out/host/usr/include -I/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/staging_dir/target/host/include -I/home/book/R818/sdk/r818-tina-sdk/out/host/include/python2.7" LDFLAGS="-L/home/book/R818/sdk/r818-tina-sdk/out/host/lib -L/home/book/R818/sdk/r818-tina-sdk/out/host/usr/lib -L/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/staging_dir/target/host/lib -lpython2.7 -Wl,-rpath=/home/book/R818/sdk/r818-tina-sdk/out/host/lib" _PYTHON_HOST_PLATFORM=linux2 /home/book/R818/sdk/r818-tina-sdk/out/host/bin/python2.7 ./setup.py install --root="/" --prefix="/home/book/R818/sdk/r818-tina-sdk/out/host" ; Traceback (most recent call last): File "./setup.py", line 86, in <module> "test": Unsupported File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/__init__.py", line 128, in setup _install_setup_requires(attrs) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/__init__.py", line 123, in _install_setup_requires dist.fetch_build_eggs(dist.setup_requires) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/dist.py", line 513, in fetch_build_eggs replace_conflicting=True, File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/pkg_resources/__init__.py", line 774, in resolve replace_conflicting=replace_conflicting File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1057, in best_match return self.obtain(req, installer) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1069, in obtain return installer(requirement) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/dist.py", line 580, in fetch_build_egg return cmd.easy_install(req) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 673, in easy_install return self.install_item(spec, dist.location, tmpdir, deps) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 699, in install_item dists = self.install_eggs(spec, download, tmpdir) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 884, in install_eggs return self.build_and_install(setup_script, setup_base) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1152, in build_and_install self.run_setup(setup_script, setup_base, args) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1138, in run_setup run_setup(setup_script, args) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 253, in run_setup raise File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/contextlib.py", line 35, in __exit__ self.gen.throw(type, value, traceback) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context yield File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/contextlib.py", line 35, in __exit__ self.gen.throw(type, value, traceback) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 166, in save_modules saved_exc.resume() File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 141, in resume six.reraise(type, exc, self._tb) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 154, in save_modules yield saved File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 195, in setup_context yield File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 250, in run_setup _execfile(setup_script, ns) File "/home/book/R818/sdk/r818-tina-sdk/out/host/lib/python2.7/site-packages/setuptools/sandbox.py", line 44, in _execfile code = compile(script, filename, 'exec') File "/tmp/easy_install-6NxiQu/setuptools_scm-7.1.0/setup.py", line 20 def scm_version() -> str: ^ SyntaxError: invalid syntax Makefile:65: recipe for target '/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/compile_dir/target/host/python-dateutil-2.7.5/.built' failed make[3]: *** [/home/book/R818/sdk/r818-tina-sdk/out/r818-sc3917/compile_dir/target/host/python-dateutil-2.7.5/.built] Error 1 make[3]: Leaving directory '/home/book/R818/sdk/r818-tina-sdk/package/lang/python-dateutil' package/Makefile:192: recipe for target 'package/lang/python-dateutil/host/compile' failed make[2]: *** [package/lang/python-dateutil/host/compile] Error 2 make[2]: Leaving directory '/home/book/R818/sdk/r818-tina-sdk'
查看了包的Makefile规则
找到软件包源码报错位置 out/r818-sc3917/compile_dir/target/host/python-dateutil-2.7.5/setup.py
我的主机环境这里 python 2.7 python3 都有 -
回复: mCore R818使用genimage 打包镜像通过dd if烧录 提示如下错误!
@awwwwa 感谢大佬的回复,我通过分析 build/pack 使用 ./build.sh packraw
找到了下面那个最终生成的命令
然后把 programmer_img 丢进 buildroot 打包目录,直接编译打包,生成的镜像就可以直接用啦!
sunxi_gpt这个我学习一下 怎么融进去 让他自己转换打包。
不得不说,这个 programmer_img 很强大,但是里面怎么实现的我很好奇,当时修改了各种 genimage.cfg的分区类型和头部都不行。
-
mCore R818使用genimage 打包镜像通过dd if烧录 提示如下错误!
如果镜像只包含 boot0_sdcard.fex boot_package.fex 两个分区,就可以正常启动到uboot,如果增加了任意某一个 如 env boot.vfat rootfs就会出现 如下提示 GPT分区无效,目前怀疑是 R818的 uboot 启动后会对分区做动态修改,导致不能手动指定分区类型/格式。
目前尝试多种方式,都会出现类似情况,有知道问题/方向的大佬指点一下?GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition bootloader GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wr[01.512]LCD open finish ong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition boot-resource
完整启动log[28]HELLO! BOOT0 is starting! [31]BOOT0 commit : e7dab2b212 [34]set pll start [36]periph0 has been enabled [39]set pll end [41]PL gpio voltage : 1.8V [45][pmu]: bus read error [47]unknow PMU [49][pmu]: bus read error [52]PMU: AXP2202 [54][pmu]: bus read error [58]vaild para:1 select dram para0 [61]board init ok, set sys_vol to 950mv! [65]rtc[3] value = 0xb00f [88]enable_jtag [90]DRAM BOOT DRIVE INFO: V0.697 [93]the chip id is 0x1000 [95]the chip id is 0x1000 [98]the chip id is 0x1000 [101]the chip id is 0x1000 [103]the chip id is 0x1000 [106]chip id check OK [109]DRAM_VCC set to 1100 mv [122][AUTO DEBUG]32bit,2 ranks training success! [250][AUTO DEBUG]default config,dram_clk=792 ,mtest pass [600][AUTO DEBUG]26-45,19,0x23 18-36,18,0x1b 23-44,21,0x21 26-48,22,0x25 [AUTO DEBUG]10-26,16,0x12 11-29,18,0x14 11-28,17,0x13 7-28,21,0x11 [708][AUTO DEBUG]after escan,dram_tpr11 = 25211b23,dram_tpr12 = 11131412 [715]DRAM CLK =792 MHZ [717]DRAM Type =8 (3:DDR3,4:DDR4,6:LPDDR2,7:LPDDR3,8:LPDDR4) [729]phy_dfs_clk1 = 632M [731]phy_dfs_clk2 = 352M [734]phy_dfs_clk3 = 98M [737]phy_dfs_clk0 = 792M [739]DRAM SIZE =4096 MBytes, para1 = 310a, para2 = 10001000, tpr13 = 7525 [751]DRAM simple test OK. [754]dram size =4096 [757]chipid = 53801000 [759]nsi init ok 2021-10-14 [762]card no is 0 [764]sdcard 0 line count 4 [766][mmc]: mmc driver ver 2021-10-12 13:56 [771][mmc]: b mmc 0 bias 4 [779][mmc]: Wrong media type 0x0 [782][mmc]: ***Try SD card 0*** [793][mmc]: HSSDR52/SDR25 4 bit [796][mmc]: 50000000 Hz [798][mmc]: 30448 MB [800][mmc]: ***SD/MMC 0 init OK!!!*** [877]Loading boot-pkg Succeed(index=0). [881][mmc]: b mmc 0 bias 4 [884]Entry_name = u-boot [892]Entry_name = dtb [895]mmc not para ▒897]Jump to second Boot. U-Boot 2018.07-gdb54bdb-dirty (Aug 08 2023 - 02:23:48 +0000) Allwinner Technology [00.908]CPU: Allwinner Family [00.911]Model: sun50iw10 I2C: ready [00.927]DRAM: 4 GiB [00.931]Relocation Offset is: 75eee000 [00.965]secure enable bit: 0 [00.968]PMU: AXP2202 [00.970]BMU: AXP2202 AXP2202_IIN_LIM:38 AXP2202_IIN_LIM:38 [00.977][axp][err]: b12_mode: 0 AXP2202_IIN_LIM:38 FDT ERROR:fdt_get_all_pin:get property handle pinctrl-1 error:FDT_ERR_INTERNAL bias_name:pl_bias bias_vol:1800 bias_name:pc_bias bias_vol:1800 [01.024]battery_check pass:radio:100, vol:4345 [01.029]EXT: EXT_probe [01.031]pmu_sy8827g_probe pmic_bus_read fail [01.035]TCS: TCS_probe [01.037]pmu_tcs4838_probe pmic_bus_read fail [01.042]CPU=1416 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=400Mhz [01.048]gic: normal mode sunxi flash map init [01.052]flash init start [01.054]workmode = 0,storage type = 1 get value error [01.059][mmc]: mmc driver ver uboot2018:2022-11-04 08:58:00 [01.064][mmc]: get sdc_type fail and use default host:tm1. [01.070][mmc]: can't find node "mmc0",will add new node [01.075][mmc]: fdt err returned <no error> [01.079][mmc]: Using default timing para [01.082][mmc]: SUNXI SDMMC Controller Version:0x50300 [01.101][mmc]: card_caps:0x3000000a [01.104][mmc]: host_caps:0x3000003f [01.109]sunxi flash init ok [01.112]drv_disp_init partno erro : can't find partition bootloader partno erro : can't find partition boot-resource Get bootloader and boot-resource partition number fail! request pwm success, pwm0:pwm0:0x300a000. [01.161]drv_disp_init finish GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** [01.192]Loading Environment from SUNXI_FLASH... GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** *** Warning - no device, using default environment Failed (-19) [01.226]boot_gui_init:start [01.228]set disp.dev2_output_type fail. using defval=0 [01.395]set disp.fb0_rot_used fail. using defval=0 [01.399]set disp.fb0_rot_degree fail. using defval=0 [01.404]soc ic_ver:0x4, qa_val:0x0, markid:0x1000 dclk[0-200] display_cfg_flag:0 [01.412]boot_gui_init:finish GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition bootloader GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wr[01.512]LCD open finish ong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition boot-resource [01.526]Get bootloader and boot-resource partition number fail! [01.532]Item0 (Map) magic is bad [01.535]the secure storage item0 copy0 magic is bad [01.541]Item0 (Map) magic is bad [01.543]the secure storage item0 copy1 magic is bad [01.548]Item0 (Map) magic is bad [01.551]usb burn from boot delay time 0 weak:otg_phy_config [01.562]usb prepare ok [01.827]usb sof ok [01.829]usb probe ok [01.831]usb setup ok set address 0x35 set address 0x35 ok [02.238]do_burn_from_boot usb : have no handshake cann't get the boot_base from the env GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** [02.272]update part info [02.275]battery temp is 194 GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** [02.326]update bootcmd GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** [02.376]change working_fdt 0xbbe9de50 to 0xbbe6de50 disable nand error: FDT_ERR_BADPATH get value error GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition bootloader GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition boot-resource Get bootloader and boot-resource partition number fail! GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition bootloader GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition boot-resource Get bootloader and boot-resource partition number fail! GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition bootloader GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_get_info_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid Backup GPT *** partno erro : can't find partition boot-resource Get bootloader and boot-resource partition number fail! [02.594]libfdt fdt_path_offset() for lcd [02.598]Could not find pmu_ext type: update_pmu_ext_info_to_kernel: L63 [02.604]update dts Hit any key to stop autoboot: 0 ## Error: "distro_bootcmd" not defined => mmc <INTERRUPT> => part list mmc 0 Partition Map for MMC device 0 -- Partition Type: EFI GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_print_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_print_efi: *** ERROR: Invalid Backup GPT *** => part list mmc 0 Partition Map for MMC device 0 -- Partition Type: EFI GUID Partition Table Entry Array CRC is wrong: 0xab54d286 != 0xb6ac2e52 part_print_efi: *** ERROR: Invalid GPT *** GUID Partition Table Header signature is wrong: 0x0 != 0x5452415020494645 part_print_efi: *** ERROR: Invalid Backup GPT ***
-
100ASK-V853-PRO开发板支持yolov5模型部署
100ASK_V853-PRO开发板支持yolov5模型部署
0.前言
本章节主要讲述如何获取yolov5单阶段目标检测算法,并将yolov5原始模型转换为ONNX格式。使用模型转换工具进行模型的转换,并将转换后的模型部署到开发板上。
本章使用的软件列表:
- anaconda(Windows)
- Git(Windows)
- Tina SDK(Linux)
- 全志NPU扩展包(Linux)
- OpenCV库(Linux)
硬件列表:
百问网100ASK_V853-PRO开发板:https://www.aw-ol.com/boards/16这里提供Source资源包:source (包含conda配置yolov5环境依赖包文件,端侧部署代码)
yolov5体验镜像:v853_linux_100ask_uart0.img (测试方法:yolov5 /etc/models/yolov5_model.nb <测试图像>)
YOLOV5官方提供的V6.0版本的资源:
yolov5s ONNX模型文件:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.onnx
yolov5s PT模型文件:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
yolov5-v6.0代码:https://github.com/ultralytics/yolov5/archive/refs/tags/v6.0.zip
1.配置yolov5环境
yolov5官方网址为:https://github.com/ultralytics/yolov5
使用Git工具在任意目录下获取源码V6.0版本,输入
git clone -b v6.0 https://github.com/ultralytics/yolov5
如果您使用Git下载出现问题,也可以直接点击下面网址直接下载源码压缩包,下载完成解压即可正常使用。
https://github.com/ultralytics/yolov5/archive/refs/tags/v6.0.zip
等待下载完成,下载完成后会在当前目录下,查看到yolov5项目文件夹
100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5 $ ls yolov5/ 100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5 $ cd yolov5/ 100askTeam@DESKTOP-F46NFJT MINGW64 /d/Programmers/ModelDeployment/2.yolov5/yolov5 (master) $ ls CITATION.cff README.zh-CN.md detect.py requirements.txt tutorial.ipynb CONTRIBUTING.md benchmarks.py export.py segment/ utils/ LICENSE classify/ hubconf.py setup.cfg val.py README.md data/ models/ train.py
打开Anaconda Prompt (Anaconda3)软件,进入yolov5项目目录中,输入以下命令
(base) C:\Users\100askTeam>D: (base) D:\>cd D:\Programmers\ModelDeployment\2.yolov5\yolov5 (base) D:\Programmers\ModelDeployment\2.yolov5\yolov5>
使用conda创建yolov项目环境,输入
conda create -n my-yolov5-env python=3.7
激活yolov5环境
conda activate my-yolov5-env
安装依赖
pip install -U -r requirements.txt -i https://pypi.doubanio.com/simple/
FAQ:
搭建环境时由于版本的不同会遇各种问题,下面我会提供我配置好的环境所需的包文件版本,文件位于压缩包的requirements文件夹中的conda-yolov5_6-env.yaml。在Conda终端中创建新环境,执行
conda env create -f conda-yolov5_6-env.yaml
执行
python detect.py
,测试环境是否搭建成功,执行后会自动下载模型权重文件这里下载速度可能会很慢,建议直接访问官网下载https://github.com/ultralytics/yolov5/tree/v6.0,点击下图红框处的YOLOV5s。这里我下载 v6.0 版本的 yolov5s.onnx 模型作为示例。
下载地址:https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
点进入后会进去yolov5资源中心,往下找到V6.0版本的资源下载界面,找到您所需的资源即可。
将该模型文件放在yolov5项目文件夹下,如下图所示:
在conda终端中输入
python detect.py
,可得到如下执行结果(my-yolov5-env) D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0>python detect.py detect: weights=yolov5s.pt, source=data\images, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False YOLOv5 2021-10-12 torch 2.0.1+cpu CPU Fusing layers... D:\Anaconda3\envs\my-yolov5-env\lib\site-packages\torch\functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\native\TensorShape.cpp:3484.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined] Model Summary: 213 layers, 7225885 parameters, 0 gradients image 1/2 D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0\data\images\bus.jpg: 640x480 4 persons, 1 bus, Done. (0.274s) image 2/2 D:\Programmers\ModelDeployment\2.yolov5\yolov5-6.0\data\images\zidane.jpg: 384x640 2 persons, 1 tie, Done. (0.189s) Speed: 4.5ms pre-process, 231.3ms inference, 2.8ms NMS per image at shape (1, 3, 640, 640) Results saved to runs\detect\exp1
FAQ:
如果您执行此命令时,遇到如下报错:
原因:torch版本过高,可以通过修改代码或者降低版本。
下面我使用修改代码的方式解决:
修改
D:\Anaconda3\envs\my-yolov5-env\lib\site-packages\torch\nn\modules\upsampling.py
文件中的Upsample类中forward函数的返回值。原本:
def forward(self, input: Tensor) -> Tensor: return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners, recompute_scale_factor=self.recompute_scale_factor)
修改后:
def forward(self, input: Tensor) -> Tensor: return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
修改结果如下图所示:
执行
python detect.py
完成后,可以在yolov5项目文件夹下的runs\detect\exp1目录下找到执行后的输出结果,如下所示。2.导出yolov5 ONNX模型
2.1 export程序导出模型
在export.py程序找到parse_opt函数,查看默认输出的模型格式。如果默认支持有onnx格式,就无需修改,如果默认没有填写onnx,修改默认格式为onnx格式。
执行export.py函数前需要需要确保已经安装了onnx包,可手动安装,如下所示
pip install onnx==1.13.0 -i https://pypi.doubanio.com/simple/
执行export.py函数导出yolov5的onnx格式动态模型,在conda终端输入
python export.py --weights yolov5s.pt --include onnx --dynamic
执行完成后会在yolov5项目目录中生成一个名称为
yolov5s.onnx
的文件,如下图所示:2.2 简化模型
由于转换的模型是动态 Shape 的,不限制输入图片的大小,对于 NPU 来说会增加处理工序,所以这里我们需要转换为静态 Shape 的模型。
需要安装
onnxsim
工具,在conda终端输入pip install onnxsim -i https://pypi.doubanio.com/simple/
然后使用这条命令转换:
python -m onnxsim yolov5s.onnx yolov5s-sim.onnx --input-shape 1,3,640,640
执行完成后会导出名为
yolov5s-sim.onnx
文件,文件位于yolov5项目文件夹下,如下图所示:2.3 查看模型
使用开源网站Netron网站
访问上面网址查看模型结构。
选择
yolov5s-sim.onnx
文件,点击打开。查看如下图所示输出节点
可看到模型有 4 个输出节点,其中 ouput 节点为后处理解析后的节点;在实际测试的过程中,发现 NPU 量化操作后对后处理的运算非常不友好,输出数据偏差较大,所以我们可以将后处理部分放在 CPU 运行;因此保留
350
,498
,646
三个后处理解析前的输出节点即可,后文在导入模型时修改输出节点。3.转换NPU模型
3.1 创建转换目录
打开NPU工具包的虚拟机Ubuntu20.04,创建yolov5-6.0文件夹,存放模型和量化图像等。
ubuntu@ubuntu2004:~$ mkdir yolov5-6.0
进入yolov5模型转换目录。
ubuntu@ubuntu2004:~$ cd yolov5-6.0/
创建data目录存放量化图像
mkdir data
将量化图像传入data文件夹下,例如,传入
test01.jpg
图像到data
ubuntu@ubuntu2004:~/yolov5-test$ ls data test01.jpg
在yolov5模型转换目录中创建
dataset.txt
ubuntu@ubuntu2004:~/yolov5-6.0$ touch dataset.txt
修改
dataset.txt
文件ubuntu@ubuntu2004:~/yolov5-6.0$ vi dataset.txt
在
dataset.txt
文件中增加量化图片的路径../data/test01.jpg
将
yolov5s-sim.onnx
模型传入yolov5模型转换文件夹下。例如:ubuntu@ubuntu2004:~/yolov5-6.0$ ls data dataset.txt yolov5s-sim.onnx
工作目录的文件如下所示:
ubuntu@ubuntu2004:~/yolov5-6.0$ tree . ├── data │ └── test01.jpg ├── dataset.txt └── yolov5s-sim.onnx 1 directory, 3 files
3.2 导入模型
导入模型前需要知道我们要保留的输出节点,由之前查看到我们输出的三个后处理节点为:
350
,498
,646
。pegasus import onnx --model yolov5s-sim.onnx --output-data yolov5s-sim.data --output-model yolov5s-sim.json --outputs 350 498 646
导入生成两个文件,分别是是
yolov5s-sim.data
和yolov5s-sim.json
文件,两个文件是 YOLO V5 网络对应的芯原内部格式表示文件,data
文件储存权重,cfg
文件储存模型。3.3生成 YML 文件
YML 文件对网络的输入和输出的超参数进行描述以及配置,这些参数包括,输入输出 tensor 的形状,归一化系数 (均值,零点),图像格式,tensor 的输出格式,后处理方式等等
pegasus generate inputmeta --model yolov5s-sim.json --input-meta-output yolov5s-sim_inputmeta.yml
pegasus generate postprocess-file --model yolov5s-sim.json --postprocess-file-output yolov5s-sim_postprocess_file.yml
修改
yolov5s-sim_inputmeta.yml
文件中的的scale
参数为0.0039216(1/255)
,目的是对输入tensor
进行归一化,和网络进行训练的时候是对应的。vi yolov5s-sim_inputmeta.yml
3.4 量化
生成量化表文件,使用非对称量化,uint8,修改
--batch-size
参数为你的dataset.txt
里提供的图片数量。pegasus quantize --model yolov5s-sim.json --model-data yolov5s-sim.data --batch-size 1 --device CPU --with-input-meta yolov5s-sim_inputmeta.yml --rebuild --model-quantize yolov5s-sim.quantize --quantizer asymmetric_affine --qtype uint8
3.5 预推理
利用前文的量化表执行预推理,得到推理
tensor
pegasus inference --model yolov5s-sim.json --model-data yolov5s-sim.data --batch-size 1 --dtype quantized --model-quantize yolov5s-sim.quantize --device CPU --with-input-meta yolov5s-sim_inputmeta.yml --postprocess-file yolov5s-sim_postprocess_file.yml
3.6 导出模板代码与模型
输出的模型可以在
ovxilb/yolov5s-sim_nbg_unify
文件夹中找到network_binary.nb
文件。pegasus export ovxlib --model yolov5s-sim.json --model-data yolov5s-sim.data --dtype quantized --model-quantize yolov5s-sim.quantize --batch-size 1 --save-fused-graph --target-ide-project 'linux64' --with-input-meta yolov5s-sim_inputmeta.yml --output-path ovxilb/yolov5s-sim/yolov5s-simprj --pack-nbg-unify --postprocess-file yolov5s-sim_postprocessmeta.yml --optimize "VIP9000PICO_PID0XEE" --viv-sdk ${VIV_SDK}
将生成的
network_binary.nb
文件拷贝出来备用。4.YOLOV5端侧部署
4.1 配置yolov5端侧部署环境
在进行端侧部署前,由于后处理需要使用OpenCV库,所以请先按照如下步骤
-
配置OpenCV库:https://forums.100ask.net/t/topic/3349
配置完成后才能编译端侧部署程序。
下载
source
压缩包中的yolov5.tar.gz
,将该压缩包拷贝到虚拟机中,解压压缩包tar -xzvf yolov5.tar.gz
将解压出来的文件夹拷贝到
tina-v853-open/openwrt/package/npu/
目录下cp yolov5/ ~/workspaces/tina-v853-open/openwrt/package/npu/ -rf
注意:上面的
~/workspaces/tina-v853-open/openwrt/package/npu/
目录需要更换为您自己的SDK实际的目录。拷贝完成后,如下所示:
book@100ask:~/workspaces/tina-v853-open/openwrt/package/npu$ ls lenet viplite-driver vpm_run yolov3 yolov5
4.2 编译端侧部署代码
配置编译环境
book@100ask:~/workspaces/tina-v853-open$ source build/envsetup.sh ... book@100ask:~/workspaces/tina-v853-open$ lunch You're building on Linux Lunch menu... pick a combo: 1 v853-100ask-tina 2 v853-vision-tina Which would you like? [Default v853-100ask]: 1 ...
进入Tina配置界面
book@100ask:~/workspaces/tina-v853-open$ make menuconfig
进入如下目录,选中yolov5后即可编译端侧部署程序
> 100ask > NPU <*> yolov5....................................................... yolov5 demo <*> yolov5-model...................................... yolov5 test demo model
注意:yolov5-model该选择后会将yolov5_model.nb打包进镜像中,该模型文件会在/etc/models/目录下。
保存并退出Tina配置界面。
编译Tina SDK镜像,编译完成后打包生成镜像
book@100ask:~/workspaces/tina-v853-open$ make ... book@100ask:~/workspaces/tina-v853-open$ pack
注意:如果您将模型打包进镜像中,可能会出现文件系统大小设置值太小的问题们可以参考https://forums.100ask.net/t/topic/3158解决。
打包完成后,使用全志烧写工具进行烧写新镜像,如果您还不会烧写系统,请参考:https://forums.100ask.net/t/topic/3403
4.3 测试yolov5端侧部署
测试图像文件要求:
- 图片
- 尺寸:640*640
开发板端:
使用ADB将测试图片传输到开发板上,将USB0的模式切换到 Device 模式
cat /sys/devices/platform/soc/usbc0/usb_device
主机端:
将ADB设备连接上虚拟机,并将虚拟机中的测试图片传输到开发板中,查看ADB设备
book@100ask:~/workspaces/testImg$ adb devices List of devices attached 20080411 device
查看需要传输的文件
book@100ask:~/workspaces/testImg$ ls bus_640-640.jpg bus_640-640.jpg
传输文件到开发板中
book@100ask:~/workspaces/testImg$ adb push bus_640-640.jpg /mnt/UDISK bus_640-640.jpg: 1 file pushed. 0.7 MB/s (97293 bytes in 0.128s)
开发板端:
进入测试图像目录
root@TinaLinux:/# cd /mnt/UDISK/ root@TinaLinux:/mnt/UDISK# ls bus_640-640.jpg lost+found overlay
yolov5程序参数要求:yolov5 <模型文件路径> <测试图像路径>
如果您打包了默认的yolov5模型文件,可以输入
yolov5 /etc/models/yolov5_model.nb ./bus_640-640.jpg
如果您需要选择自己的模型文件进行测试,可以将上面的
/etc/models/yolov5_model.nb
更换为自己的模型路径,下面我以默认的模型文件进行测试。
查看输出图像文件
yolov5_out.jpg
root@TinaLinux:/mnt/UDISK# ls bus_640-640.jpg lost+found overlay yolov5_out.jpg
主机端:
拉取输出文件
yolov5_out.jpg
到当前文件夹下book@100ask:~/workspaces/testImg$ adb pull /mnt/UDISK/yolov5_out.jpg ./ /mnt/UDISK/yolov5_out.jpg: 1 file pulled. 0.9 MB/s (184894 bytes in 0.202s)

4.4 测试其他图像
对于人形的识别,该模型还是比较准确的
对于交通道路这种复杂的情况,对于行人丢失些许目标,但对于车辆效果很好,丢失情况较少。
测试动物,对于动物的检测该模型是十分准确的,检测效果即预测精度都较高。
-
100ASK_V853-PRO开发板支持按键输入
100ASK_V853-PRO开发板支持按键输入
0.前言
100ASK_V853-PRO开发板上共有5个功能按键,本章节跟大家讨论如何使能这五个按键。
1.V853功能按键原理
100ASK_V853-PRO开发板上提供的5个按键是通过GPADC高精度数模转换模块模拟出5个功能按键。GPADC 是 12bit
分辨率,8 位采集精度的模数转换模块,具体通道数可以查看对应的 spec 说明⽂档,模拟输⼊范 围 0〜1.8V,最⾼采样率
1MHz,并且⽀持数据⽐较,⾃校验功能,同时⼯作于可配置⼀下⼯作模式:
- Single mode:在指定的通道完成⼀次转换并将数据放在对应数据寄存器中;
- Single-cycle mode:在指定的通道完成⼀个周期转换并将数据放在响应数据寄存器中;
- Continuous mode:在指定的通道持续转换并将数据放在响应数据寄存器中;
- Burst mode:边采样边转换并将数据放⼊ 32 字节的 FIFO,⽀持中断控制。
部分 GPADC 接⼝也开始慢慢⽤于 KEY 模块按键的读取,⼀般包括 VOL+、VOL-、HOME、MENU、ENTER 等等, GPADC0 ⽤于 KEY 的电路如上图。 AVCC-AP 为 1.8V 的供电,不同的按键按下,GPADC0 ⼝的电压不同,CPU 通过对这个电压的采样来确定具体是那 ⼀个按键按下。如上图,VOL+、VOL-、MENU、ENTER、HOME/UBOOT 对应的电压分别为 0.21V、0.41V、 0.59V、0.75V、0.88V。具体可以查看《100ASK-V853_Pro系统开发手册.pdf》中第五篇驱动开发的第⼗三章 Linux GPADC 开发指南。
2.GPADC驱动
GPADC驱动存放的位置为
tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.c tina-v853-open/kernel/linux-4.9/drivers/input/sensor/sunxi_gpadc.h
3.GPADC内核配置
在Tina的根目录下输入
make kernel_menuconfig
book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
进入如下目录中,输入Y使能SUNXI GPADC驱动。
→ Device Drivers → Input device support → Sensors <*> SUNXI GPADC
配置完成后如下图所示。
保存并退出内核配置界面。
4.GPADC设备树配置
内核设备树存放位置:
tina-v853-open/device/config/chips/v853/configs/100ask/board.dts
进入该目录后输入
vi board.dts
book@100ask:~/workspaces/tina-v853-open$ cd device/config/chips/v853/configs/100ask/ book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls BoardConfig.mk board.dts buildroot env.cfg linux-4.9 sys_config.fex uboot-board.dts book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts
找到&gpadc节点,这个节点保存有采样相关的配置,键值,电压数据等。
&gpadc { channel_num = <1>; // 使用1通道 channel_select = <0x01>; // 选择 0x01 通道 channel_data_select = <0>; // 启用数据通道 channel_compare_select = <0x01>; // 启用通道比较功能 channel_cld_select = <0x01>; // 启用数据小于比较功能 channel_chd_select = <0>; // 启用数据大于比较功能 channel0_compare_lowdata = <1700000>; // 小于这个值触发中断 channel0_compare_higdata = <1200000>; // 大于这个值触发中断 channel1_compare_lowdata = <460000>; // 小于这个值触发中断 channel1_compare_higdata = <1200000>; // 大于这个值触发中断 key_cnt = <5>; // 按键数量 key0_vol = <210>; // 按键电压,单位mv key0_val = <115>; // 按下按键的键值 key1_vol = <410>; // 按键电压,单位mv key1_val = <114>; // 按下按键的键值 key2_vol = <590>; // 按键电压,单位mv key2_val = <139>; // 按下按键的键值 key3_vol = <750>; // 按键电压,单位mv key3_val = <28>; // 按下按键的键值 key4_vol = <880>; // 按键电压,单位mv key4_val = <102>; // 按下按键的键值 status = "okay"; // 启用GPADC };
我们还能通过board.dts文件中知道还有一部分不经常需要修改的配置保存在sun8iw21p1.dtsi文件中,进入该目录,并打开该文件。
book@100ask:~/workspaces/tina-v853-open$ cd kernel/linux-4.9/arch/arm/boot/dts/ book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/arch/arm/boot/dts$ vi sun8iw21p1.dtsi
查看gpadc节点,可以发现这里的配置保存有中断和时钟等信息,但默认不使能。注意:这里可以不修改,因为这里的所设置的status配置会被board.dts中的status覆盖,只要在board.dts设置为使能,最终生成打包进镜像的设备树都为使能状态。
gpadc:gpadc@2009000 { compatible = "allwinner,sunxi-gpadc"; // 用于驱动和设备的绑定 reg = <0x0 0x02009000 0x0 0x400>; // 设备使用的寄存器地址 interrupts = <GIC_SPI 57 IRQ_TYPE_NONE>; // 设备使用的中断 clocks = <&clk_gpadc>; // 设备使用的时钟 status = "disabled"; // 配置默认不启用GPADC };
5.增加getevent测试包
在Tina根目录下执行
make menuconfig
book@100ask:~/workspaces/tina-v853-open$ make menuconfig
进入Utilities目录下,输入Y选中getevent
> Utilities <*> getevent.................................... getevent for Android Toolbox
选中完成后如下图所示。
保存并退出Tina配置界面。6.编译、打包和烧写
在Tina的根目录下,输入
make -j32
book@100ask:~/workspaces/tina-v853-open$ make -j32 ... book@100ask:~/workspaces/tina-v853-open$ pack ...
生成镜像后,将tina-v853-open/out/v853/100ask/openwrt/目录下的v853_linux_100ask_uart0.img镜像拷贝到Windows电脑主机中,使用全志PhoenixSuit烧写工具烧写到开发板上。
插上12V的电源线,和两条Type-C,把开关拨向电源接口方向上电,烧写新镜像后等待启动系统,在命令行中输入
getevent
可以进入测试程序,通过输出的打印信息我们知道,我们的gpadc驱动上报的信息使用的是
/dev/input/event1
,此时按下按键,会读取按键的键值。root@TinaLinux:~# getevent add device 1: /dev/input/event2 name: "ft6336" add device 2: /dev/input/event1 name: "sunxi-gpadc0" add device 3: /dev/input/event0 name: "axp2101-pek" poll 4, returned 1 /dev/input/event1: 0001 0073 00000001 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000 poll 4, returned 1 /dev/input/event1: 0001 0073 00000000 poll 4, returned 1 /dev/input/event1: 0000 0000 00000000
按下Crtl+C结束测试。
7.编写一个测试应用程序
通过上一章节的测试,我们知道gpadc使用的
/dev/input/event1
上报按键数据,则我们编写的应用程序中获取数据的节点应该为/dev/input/event1,应用程序如下所示。#include <stdio.h> #include <linux/input.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/time.h> #include <limits.h> #include <unistd.h> #include <signal.h> #define DEV_PATH "/dev/input/event1" //Modified to gpadc drive reporting node static int gpadc_fd = 0; unsigned int test_gpadc(const char * event_file) { int code = 0, i; struct input_event data; gpadc_fd = open(DEV_PATH, O_RDONLY); if(gpadc_fd <= 0) { printf("open %s error!\n", DEV_PATH); return -1; } for(i = 0; i < 10; i++) //read 10 times { read(gpadc_fd, &data, sizeof(data)); if(data.value == 1) { printf("key %d pressed\n", data.code); } else if(data.value == 0) { printf("key %d releaseed\n", data.code); } } close(gpadc_fd); return 0; } int main(int argc,const char *argv[]) { int rang_low = 0, rang_high = 0; return test_gpadc(DEV_PATH);
8.编译应用程序并进行测试
新建一个gpadc目录,存放应用程序和可执行程序。
book@100ask:~/workspaces$ mkdir gpadc_test book@100ask:~/workspaces$ cd gpadc_test/ book@100ask:~/workspaces/gpadc_test$ vi gpadc_test.c
将上一小节编写的应用程序复制到gpadc_test.c中保存。
编写完成后,我们需要提供编译环境给gpadc_test应用程序,输入
book@100ask:~/workspaces/gpadc_test$ export STAGING_DIR=~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchainsunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi
使用交叉编译工具链编译二进制文件,注意:需要Tina SDK包目录需要更换为自己的目录。
book@100ask:~/workspaces/gpadc_test$ ~/workspaces/tina-v853-open/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc -o gpadc_test gpadc_test.c
编译完成后会再当前目录下生成一个gpadc_test可执行程序,将其拷贝到开发板上运行即可。下面使用TF卡的方式将文件拷贝到开发板上,此时假设你已经将文件拷贝到TF卡中,插入开发板后,在命令行中输入以下命令挂在SD卡到
/mnt/
目录下,并将gpadc_test应用程序拷贝到、root目录下。root@TinaLinux:/# mount /dev/mmcblk1p1 /mnt/ [ 26.744697] FAT-fs (mmcblk1p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. root@TinaLinux:/# cd /mnt/ root@TinaLinux:/mnt# ls System Volume Information gpadc_test root@TinaLinux:/mnt# cp gpadc_test /root/
进入/root目录下执行测试程序,该程序读取10次值会自动结束才测试
root@TinaLinux:/mnt# cd /root/ root@TinaLinux:~# ./gpadc_test key 115 pressed key 0 releaseed key 115 releaseed key 0 releaseed key 114 pressed key 0 releaseed key 114 releaseed key 0 releaseed key 139 pressed key 0 releaseed
-
100ASK_V853-PRO开发板支持4寸MIPI屏
100ASK_V853-PRO开发板支持4寸MIPI屏
0.前言
由于之前我们已经适配过RGB屏,如果我们去适配了4寸MIPI屏,那么RGB屏就不能使用了。对于4寸屏购买链接为:
LCD_调试指南:https://tina.100ask.net/SdkModule/Linux_LCD_DevelopmentGuide-01/
Display_开发指南:https://tina.100ask.net/SdkModule/Linux_Display_DevelopmentGuide-01/
4寸屏适配资源包:V853支持4寸MIPI屏source.zip 。该资源包里面包含了适配修改后的所有文件(包括驱动程序、设备树和配置文件等)
1.添加新驱动
将驱动程序添加到
内核的lcd驱动目录下:
tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd
uboot的lcd驱动目录下:
tina-v853-open/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/
由于uboot和内核中的屏驱动会存在一些差别,下面分别展示出uboot和内核中不同的屏驱动。具体源文件可以在4寸屏适配资源包中查看。
1.1 uboot驱动程序
驱动程序头文件tft08006.h
#ifndef _TFT08006_H #define _TFT08006_H #include "panels.h" extern __lcd_panel_t tft08006_panel; extern s32 bsp_disp_get_panel_info(u32 screen_id, disp_panel_para *info); #endif /*End of file*/
驱动程序的C文件tft08006.c
这里只展示与内核不同的部分
__lcd_panel_t tft08006_panel = { /* panel driver name, must mach the name of * lcd_drv_name in sys_config.fex */ .name = "tft08006", .func = { .cfg_panel_info = lcd_cfg_panel_info, .cfg_open_flow = lcd_open_flow, .cfg_close_flow = lcd_close_flow, .lcd_user_defined_func = lcd_user_defined_func, }, };
1.2 内核驱动程序
驱动程序头文件tft08006.h
#ifndef _TFT08006_H #define _TFT08006_H #include "panels.h" extern struct __lcd_panel tft08006_panel; extern s32 bsp_disp_get_panel_info(u32 screen_id, struct disp_panel_para *info); #endif /*End of file*/
驱动程序的C文件"tft08006.c,这里只展示与uboot不同的部分。
struct __lcd_panel tft08006_panel = { /* panel driver name, must mach the name of * lcd_drv_name in sys_config.fex */ .name = "tft08006", .func = { .cfg_panel_info = lcd_cfg_panel_info, .cfg_open_flow = lcd_open_flow, .cfg_close_flow = lcd_close_flow, .lcd_user_defined_func = lcd_user_defined_func, }, };
2.修改内核中panels.h和panels.c
由于内核中没有对tft08006屏驱动有相关的配置,所以我们还需要在panels全志显示驱动中增加定义。
2.1 修改内核中panels.h
在屏驱动目录下修改panels.h
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.h
在icn6202屏驱动定义的后面增加tft08006屏驱动定义
#ifdef CONFIG_LCD_SUPPORT_ICN6202 extern struct __lcd_panel icn6202_panel; #endif #ifdef CONFIG_LCD_SUPPORT_ICN6202 extern struct __lcd_panel icn6202_panel; #endif #ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI extern struct __lcd_panel nt35510_panel; #endif
按下ESC,输入
:wq
,保存刚才的修改并退出2.2 修改内核中panels.c
在屏驱动目录下修改panels.c
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi panels.c
在icn6202屏驱动定义的后面增加tft08006屏驱动定义
#ifdef CONFIG_LCD_SUPPORT_ICN6202 &icn6202_panel, #endif #ifdef CONFIG_LCD_SUPPORT_TFT08006 &tft08006_panel, #endif #ifdef CONFIG_LCD_SUPPORT_NT35510_MIPI &nt35510_panel, #endif
按下ESC,输入
:wq
,保存刚才的修改并退出3.修改内核中Kconfig和Makefile
3.1 修改内核中的Kconfig
修改屏驱动目录下的Kconfig,使内核配置中增加tft08006屏驱动的,以便后续选择编译该屏驱动
在屏驱动目录下输入
vi Kconfig
tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd$ vi Kconfig
在icn6202屏驱动配置的后面增加tft08006屏驱动配置
config LCD_SUPPORT_ICN6202 bool "LCD support icn6202 panel" default n ---help--- If you want to support icn6202 panel for display driver, select it. config LCD_SUPPORT_TFT08006 bool "LCD support tft08006 panel" default n ---help--- If you want to support tft08006 panel for display driver, select it. config LCD_SUPPORT_NT35510_MIPI bool "LCD support nt35510_mipi panel" default n help If you want to support nt35510_mipi panel for display driver, select it.
按下ESC,输入
:wq
,保存刚才的修改并退出3.2 修改内核中的Makefile
返回屏驱动的上一级目录,修改Makefile文件
book@100ask:~/workspaces/tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp$ vi Makefile
在icn6202屏驱动编译规则的后面增加tft08006屏驱动编译规则
disp-$(CONFIG_LCD_SUPPORT_ICN6202) += lcd/icn6202.o disp-$(CONFIG_LCD_SUPPORT_TFT08006) += lcd/tft08006.o disp-$(CONFIG_LCD_SUPPORT_NT35510_MIPI) += lcd/nt35510.o
按下ESC,输入
:wq
,保存刚才的修改并退出4.修改内核配置
在Tina的根目录下输入
make kernel_menuconfig
,进入内核配置界面。book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
在选中屏驱动前,要确保
DISP Driver Support(sunxi-disp2)
,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Video support for sunxi
目录下输入Y选中sunxi-disp2
打开lcd节点配置。→ Device Drivers → Graphics support → Frame buffer Devices → Video support for sunxi <*> DISP Driver Support(sunxi-disp2)
进入屏驱动目录,输入Y选中tft08006
→ Device Drivers → Graphics support → Frame buffer Devices → Video support for sunxi → LCD panels select [*] LCD support tft08006 panel
如下图所示,选中tft08006屏驱动,编译到内核中。
保存并推车内核配置界面。
5.修改uboot配置
进入uboot的根目录下,执行
make menuconfig
,打开uboot配置界面。book@100ask:~/workspaces/tina-v853-open/brandy/brandy-2.0/u-boot-2018$ make menuconfig
在选中屏驱动前,要确保
DISP Driver Support(sunxi-disp2)
,我们的提供的SDK默认已经打开了,如果您之前关闭了,需要在内核配置界面中,进入Graphics support
目录下输入Y选中sunxi-disp2
打开lcd节点配置。→ Device Drivers → Graphics support [*] DISP Driver Support(sunxi-disp2) --->
进入屏驱动目录下,输入Y选中TFT08006屏驱动。
→ Device Drivers → Graphics support → LCD panels select [*] LCD support TFT08006 panel
如下图所示,选中tft08006屏驱动。
保存并退出uboot配置界面6.修改设备树
设备树位置:tina-v853-open/device/config/chips/v853/configs/100ask/
book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ ls BoardConfig.mk board.dts buildroot env.cfg linux-4.9 sys_config.fex uboot-board.dts
其中board.dts为内核设备树,uboot-board.dts为uboot设备树。
6.1 修改uboot设备树
在设备树的目录下输入
vi uboot-board.dts
,编译uboot设备树。book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi uboot-board.dts
注释掉原来的lcd0节点,修改tft08006屏lcd0节点
&lcd0 { base_config_start = <1>; lcd_used = <1>; lcd_driver_name = "tft08006"; lcd_backlight = <500>; lcd_if = <4>; lcd_x = <480>; lcd_y = <800>; lcd_width = <52>; lcd_height = <52>; lcd_dclk_freq = <25>; lcd_pwm_used = <1>; lcd_pwm_ch = <9>; lcd_pwm_freq = <50000>; lcd_pwm_pol = <1>; lcd_pwm_max_limit = <255>; lcd_hbp = <10>; lcd_ht = <515>; lcd_hspw = <5>; lcd_vbp = <20>; lcd_vt = <830>; lcd_vspw = <5>; lcd_dsi_if = <0>; lcd_dsi_lane = <2>; lcd_dsi_format = <0>; lcd_dsi_te = <0>; lcd_dsi_eotp = <0>; lcd_frm = <0>; lcd_io_phase = <0x0000>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; lcd_gamma_en = <0>; lcd_bright_curve_en = <0>; lcd_cmap_en = <0>; lcdgamma4iep = <22>; lcd_gpio_0 = <&pio PH 0 1 0 3 1>; pinctrl-0 = <&dsi4lane_pins_a>; pinctrl-1 = <&dsi4lane_pins_b>; base_config_end = <1>; };
在&pio节点后增加复用引脚
dsi4lane_pins_a: dsi4lane@0 { allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,function = "dsi"; allwinner,muxsel = <5>; allwinner,drive = <3>; allwinner,pull = <0>; }; dsi4lane_pins_b: dsi4lane@1 { allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "DP11"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; allwinner,drive = <1>; allwinner,pull = <0>; };
6.2 修改内核设备树
在设备树的目录下输入
vi board.dts
,编译内核设备树。book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts
注释掉原来的lcd0节点,修改tft08006屏lcd0节点
&lcd0 { base_config_start = <1>; lcd_used = <1>; lcd_driver_name = "tft08006"; lcd_backlight = <500>; lcd_if = <4>; lcd_x = <480>; lcd_y = <800>; lcd_width = <52>; lcd_height = <52>; lcd_dclk_freq = <25>; lcd_pwm_used = <1>; lcd_pwm_ch = <9>; lcd_pwm_freq = <50000>; lcd_pwm_pol = <1>; lcd_pwm_max_limit = <255>; lcd_hbp = <10>; lcd_ht = <515>; lcd_hspw = <5>; lcd_vbp = <20>; lcd_vt = <830>; lcd_vspw = <5>; lcd_dsi_if = <0>; lcd_dsi_lane = <2>; lcd_dsi_format = <0>; lcd_dsi_te = <0>; lcd_dsi_eotp = <0>; lcd_frm = <0>; lcd_io_phase = <0x0000>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; lcd_gamma_en = <0>; lcd_bright_curve_en = <0>; lcd_cmap_en = <0>; lcdgamma4iep = <22>; lcd_gpio_0 = <&pio PH 0 1 0 3 1>; pinctrl-0 = <&dsi4lane_pins_a>; pinctrl-1 = <&dsi4lane_pins_b>; base_config_end = <1>; };
在&pio节点后增加复用引脚
dsi4lane_pins_a: dsi4lane@0 { allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,function = "dsi"; allwinner,muxsel = <5>; allwinner,drive = <3>; allwinner,pull = <0>; }; dsi4lane_pins_b: dsi4lane@1 { allwinner,pins = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "PD11"; allwinner,pname = "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD9", "PD10", "DP11"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; allwinner,drive = <1>; allwinner,pull = <0>; };
7.增加I2C触摸
通过拿到的屏幕资料包,我们可以知道该MIPI屏的触摸芯片为FT5336,下面我们使用全志已经内置好的FT6336触摸驱动。
7.1 修改设备树
修改twi2节点,使用ft6336驱动,修改触摸的范围。宽X为480,高y为800。其中初始化引脚需要查看V853底板原理图,其中初始化引脚为PH7,唤醒引脚为PH8。
&twi2 { ctp@38 { status = "okay"; ctp_used = <1>; ctp_name = "ft6336"; ctp_twi_id = <0x2>; ctp_twi_addr = <0x38>; ctp_screen_max_x = <0x480>; ctp_screen_max_y = <0x800>; ctp_revert_x_flag = <0x0>; ctp_revert_y_flag = <0x1>; ctp_exchange_x_y_flag = <0x0>; ctp_int_port = <&pio PH 7 6 1 3 0xffffffff>; ctp_wakeup = <&pio PH 8 1 1 3 0xffffffff>; }; };
对于设备树的参数意义,可以访问百问网的Tina站点:https://tina.100ask.net/SdkModule/Linux_Deploy_DevelopmentGuide-02/#39
7.2 修改内核配置
由于我们之前适配过了RGB屏触摸驱动,所以需要进入内核中修改为我们使用的新驱动,进入如下目录中,按下空格键取消勾选之前的触摸驱动gt9xxnew touchscreen driver,输入Y选中我们使用的ft6336 touchscreen driver新驱动,并保存退出。
→ Device Drivers → Input device support → Touchscreens <*> ft6336 touchscreen driver
7.3 修改驱动程序
修改ft6336.c触摸驱动程序,这里只展示修改的部分,源文件可见4寸屏适配资源包中查看。
input_report_abs(ts->input_dev, ABS_MT_POSITION_X, -(event->au16_x[i]-480)); input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, -(event->au16_y[i]-800));
7.4 LVGL绑定新触摸节点
由于Tina使用的默认绑定的触摸节点为/dev/input/event0,我们需要修改lvgl驱动头文件中绑定的节点为我们触摸驱动上报数据的节点,我们触摸驱动上报的节点为event2,所以需要进入
tina-v853-open/platform/thirdparty/gui/lvgl-8/lv_examples/src
目录下修改lv_drv_conf.h头文件,如下所示book@100ask:~/workspaces/tina-v853-open$ cd platform/thirdparty/gui/lvgl-8/lv_examples/src/ book@100ask:~/workspaces/tina-v853-open/platform/thirdparty/gui/lvgl-8/lv_examples/src$ vi lv_drv_conf.h
找到触摸节点中的
LIBINPUT_NAME
,将原来的/dev/input/event0
修改/dev/input/event2
,如下图红框内所示。注意:我们这里修改的是头文件,可能之前编译生成过了之后再重新编译时可能不会再编译头文件,导致修改的节点不会生效,可以手动删除out目录中的
lv_examples
示例程序或者直接删除out目录重新编译即可。具体原因可以观看韦东山老师的《ARM架构与编程》课程中的gcc编译过程详解。访问链接为:ARM架构与编程8.编译系统并打包生成镜像
返回Tina根目录下,输入
make
,编译系统book@100ask:~/workspaces/tina-v853-open$ make -j4 ... sun8iw21p1 compile Kernel successful INFO: ---------------------------------------- INFO: build Tina OK. INFO: ----------------------------------------
打包生成镜像,输入
pack
book@100ask:~/workspaces/tina-v853-open$ pack ... Dragon execute image.cfg SUCCESS ! ----------image is at---------- 33M /home/book/workspaces/tina-v853-open/out/v853/100ask/openwrt/v853_linux_100ask_uart0.img pack finish
9.烧录并测试
打包完成后,将新生成的镜像拷贝到Windows主机电脑上,使用全志PhoenixSuit烧写工具,烧写到开发板上。具体可以参考:https://forums.100ask.net/t/topic/2882。烧写完成后需要断电,才能连接MIPI屏的排线到MIPI屏接口,注意排线的线序是否一致。
接完排线后,重新接入电源,和2条Type-C数据线,再将开关拨向电源接口处上电启动,启动时会出现Tina Linux小企鹅logo,进入系统后,可以查看触摸节点
root@TinaLinux:/# ls /dev/input/ event0 event1 event2
我们使用的event2,如果你不确定您的触摸驱动程序使用的是哪个,可以通过
cat /dev/input/event*
,其中*
表示要查看的是哪一个触摸节点,例如我使用的是event2,则需要输入cat /dev/input/event2
,此时触摸屏幕会有上报信息。 使用LVGL DEMO示例,输入
lv_examples 0
启动lvgl示例,可以通过点击屏幕上的UI交互按钮测试触摸是否生效。root@TinaLinux:/# lv_examples 0 wh=480x800, vwh=480x1600, bpp=32, rotated=0 Turn on double buffering. Turn on 2d hardware acceleration. Turn on 2d hardware acceleration rotate.
-
100ASK_V853-PRO开发板支持七寸RGB屏
100ASK_V853-PRO开发板支持七寸RGB屏
0.前言
在前面我们已经学习了关于100ASK_V853-PRO编译和烧写,接下来就是在Tina SDK下去适配七寸RGB屏,购买链接为:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-18944745104.11.669f1b7fE1ptyQ&id=611156659477
LCD_调试指南:https://tina.100ask.net/SdkModule/Linux_LCD_DevelopmentGuide-01/
Display_开发指南:https://tina.100ask.net/SdkModule/Linux_Display_DevelopmentGuide-01/
如果已经使用我们的增加的补丁文件,默认启动有Tina Linux的logo,同时还支持了lvgl示例和触摸。可在开发板的串口终端上输入
lv_examples
,可以发现我们提供有5个lvgl示例。输入lv_examples 0
,可运行第一个lvgl示例。root@TinaLinux:/# lv_examples lv_examples 0, is lv_demo_widgets lv_examples 1, is lv_demo_music lv_examples 2, is lv_demo_benchmark lv_examples 3, is lv_demo_keypad_encoder lv_examples 4, is lv_demo_stress root@TinaLinux:/# lv_examples 0 wh=1024x600, vwh=1024x1200, bpp=32, rotated=0 Turn on double buffering. Turn on 2d hardware acceleration. Turn on 2d hardware acceleration rotate.
运行完成后可在七寸RGB屏上显示LVGL V8的示例界面,同时支持触摸控制示例。
1.适配七寸RGB屏的流程
由于Tina SDK中默认已经支持RGB屏驱动,所以适配七寸RGB屏只注意以下几个点:
1.修改设备树
2.配置内核
3.修改Uboot配置
内核设备树的位置:tina-v853-open/device/config/chips/v853/configs/100ask/board.dts
uboot设备树的位置:tina-v853-open/device/config/chips/v853/configs/100ask/board.dts
修改内核配置:在tina的根目录下执行
make kernel_menuconfig
修改uboot配置:进入uboot的根目录tina-v853-open/brandy/brandy-2.0/u-boot-2018下执行
make menuconfig
内核驱动位置:tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_panel.c
uboot驱动位置:
tina-v853-open/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/default_panel.c
2.检查修改设备树
在Tina根目录下,输入
cd device/config/chips/v853/configs/100ask/
book@100ask:~/workspaces/tina-v853-open$ cd device/config/chips/v853/configs/100ask/ book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi board.dts
2.1 修改内核设备树
修改 board.dts中的lcd0为:
&lcd0 { /* part 1 */ lcd_used = <1>; lcd_driver_name = "default_lcd"; lcd_backlight = <100>; /* part 2 */ lcd_if = <0>; lcd_hv_if = <0>; /* part 3 */ lcd_x = <1024>; lcd_y = <600>; lcd_width = <154>; lcd_height = <85>; lcd_dclk_freq = <51>; lcd_hbp = <140>; lcd_ht = <1344>; lcd_hspw = <20>; lcd_vbp = <20>; lcd_vt = <635>; lcd_vspw = <3>; lcd_pwm_used = <1>; lcd_pwm_ch = <9>; lcd_pwm_freq = <500>; lcd_pwm_pol = <1>; /* part 5 */ lcd_frm = <1>; lcd_io_phase = <0x0000>; lcd_gamma_en = <0>; lcd_cmap_en = <0>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; /* part 6 */ lcd_power = "vcc-lcd"; lcd_pin_power = "vcc-pd"; pinctrl-0 = <&rgb18_pins_a>; pinctrl-1 = <&rgb18_pins_b>; };
在&pio节点下增加rgb18_pins_a和rgb18_pins_b子节点,增加引脚复用功能
rgb18_pins_a: rgb18@0 { allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \ "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \ "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \ "PD18", "PD19", "PD20", "PD21"; allwinner,pname = "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", \ "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", \ "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", \ "lcdpclk", "lcdde", "lcdhsync", "lcdvsync"; allwinner,function = "lcd"; allwinner,muxsel = <2>; allwinner,drive = <3>; allwinner,pull = <0>; }; rgb18_pins_b: rgb18@1 { allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \ "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \ "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \ "PD18", "PD19", "PD20", "PD21"; allwinner,pname = "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", \ "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", \ "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", \ "lcdpclk", "lcdde", "lcdhsync", "lcdvsync"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; allwinner,drive = <3>; allwinner,pull = <0>; };
2.2 修改uboot设备树
在同一目录下修改uboot设备树
book@100ask:~/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask$ vi uboot-board.dts
&lcd0 { lcd_used = <1>; lcd_driver_name = "default_lcd"; lcd_backlight = <100>; lcd_if = <0>; lcd_hv_if = <0>; lcd_x = <1024>; lcd_y = <600>; lcd_width = <154>; lcd_height = <85>; lcd_dclk_freq = <51>; lcd_hbp = <140>; lcd_ht = <1344>; lcd_hspw = <20>; lcd_vbp = <20>; lcd_vt = <635>; lcd_vspw = <3>; lcd_pwm_used = <1>; lcd_pwm_ch = <9>; lcd_pwm_freq = <500>; lcd_pwm_pol = <1>; lcd_frm = <1>; lcd_io_phase = <0x0000>; lcd_gamma_en = <0>; lcd_cmap_en = <0>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; lcd_power = "vcc-lcd"; lcd_pin_power = "vcc-pd"; pinctrl-0 = <&rgb18_pins_a>; pinctrl-1 = <&rgb18_pins_b>; };
在&pio节点下增加rgb18_pins_a和rgb18_pins_b子节点,增加引脚复用功能
rgb18_pins_a: rgb18@0 { allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \ "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \ "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \ "PD18", "PD19", "PD20", "PD21"; allwinner,pname = "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", \ "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", \ "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", \ "lcdpclk", "lcdde", "lcdhsync", "lcdvsync"; allwinner,function = "lcd"; allwinner,muxsel = <2>; allwinner,drive = <3>; allwinner,pull = <0>; }; rgb18_pins_b: rgb18@1 { allwinner,pins = "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", \ "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", \ "PD12", "PD13", "PD14", "PD15", "PD16", "PD17", \ "PD18", "PD19", "PD20", "PD21"; allwinner,pname = "lcdd2", "lcdd3", "lcdd4", "lcdd5", "lcdd6", "lcdd7", \ "lcdd10", "lcdd11", "lcdd12", "lcdd13", "lcdd14", "lcdd15", \ "lcdd18", "lcdd19", "lcdd20", "lcdd21", "lcdd22", "lcdd23", \ "lcdpclk", "lcdde", "lcdhsync", "lcdvsync"; allwinner,function = "io_disabled"; allwinner,muxsel = <0xf>; allwinner,drive = <3>; allwinner,pull = <0>; };
3.检查修改内核配置和uboot配置
3.1 修改内核配置
在Tina的根目录下输入
make kernel_menuconfig
book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
通过方向键,选择并进入如下目录,输入Y开启DISP Driver Support
→ Device Drivers → Graphics support → Frame buffer Devices → Video support for sunxi <*> DISP Driver Support(sunxi-disp2)
如下图所示:
选中后,通过方向键选择Save,按下回车。
按下后会提示您是否确认保存备份,选择OK此时我们所修改的配置将保存在tina-v853-open/kernel/linux-4.9/.config文件中,继续按下回车退出。
保存完成后,通过方向键选择Exit,一直选择Exit,直到退出内核配置界面
3.2 修改uboot配置
想要修改uboot,需要进入tina-v853-open/brandy/brandy-2.0/u-boot-2018目录下,执行
make menuconfig
book@100ask:~/workspaces/tina-v853-open$ cd brandy/brandy-2.0/u-boot-2018/ book@100ask:~/workspaces/tina-v853-open/brandy/brandy-2.0/u-boot-2018$ make menuconfig
通过方向键进入
→ Device Drivers → Graphics support [*] DISP Driver Support(sunxi-disp2) --->
如下图所示:
选中后,通过方向键选择Save,按下回车。
按下后会提示您是否确认保存备份,选择OK此时我们所修改的配置将保存在
tina-v853-open/brandy/brandy-2.0/u-boot-2018/.config
文件中,继续按下回车退出。保存完成后,通过方向键选择Exit,一直选择Exit,直到退出uboot配置界面
4.七寸RGB屏驱动程序
内核和uboot中的驱动程序都是同一套,可以复用的。由于我们选中了sunxi-disp2,都会默认去编译default_panel.c驱动程序。
内核驱动位置:tina-v853-open/kernel/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_panel.c
uboot驱动位置:
tina-v853-open/brandy/brandy-2.0/u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/default_panel.c
/* * drivers/video/sunxi/disp2/disp/lcd/default_panel.c * * Copyright (c) 2007-2019 Allwinnertech Co., Ltd. * Author: zhengxiaobin <zhengxiaobin@allwinnertech.com> * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include "default_panel.h" static void LCD_power_on(u32 sel); static void LCD_power_off(u32 sel); static void LCD_bl_open(u32 sel); static void LCD_bl_close(u32 sel); static void LCD_panel_init(u32 sel); static void LCD_panel_exit(u32 sel); static void LCD_cfg_panel_info(panel_extend_para * info) { u32 i = 0, j=0; u32 items; u8 lcd_gamma_tbl[][2] = { //{input value, corrected value} {0, 0}, {15, 15}, {30, 30}, {45, 45}, {60, 60}, {75, 75}, {90, 90}, {105, 105}, {120, 120}, {135, 135}, {150, 150}, {165, 165}, {180, 180}, {195, 195}, {210, 210}, {225, 225}, {240, 240}, {255, 255}, }; u32 lcd_cmap_tbl[2][3][4] = { { {LCD_CMAP_G0,LCD_CMAP_B1,LCD_CMAP_G2,LCD_CMAP_B3}, {LCD_CMAP_B0,LCD_CMAP_R1,LCD_CMAP_B2,LCD_CMAP_R3}, {LCD_CMAP_R0,LCD_CMAP_G1,LCD_CMAP_R2,LCD_CMAP_G3}, }, { {LCD_CMAP_B3,LCD_CMAP_G2,LCD_CMAP_B1,LCD_CMAP_G0}, {LCD_CMAP_R3,LCD_CMAP_B2,LCD_CMAP_R1,LCD_CMAP_B0}, {LCD_CMAP_G3,LCD_CMAP_R2,LCD_CMAP_G1,LCD_CMAP_R0}, }, }; items = sizeof(lcd_gamma_tbl)/2; for (i=0; i<items-1; i++) { u32 num = lcd_gamma_tbl[i+1][0] - lcd_gamma_tbl[i][0]; for (j=0; j<num; j++) { u32 value = 0; value = lcd_gamma_tbl[i][1] + ((lcd_gamma_tbl[i+1][1] - lcd_gamma_tbl[i][1]) * j)/num; info->lcd_gamma_tbl[lcd_gamma_tbl[i][0] + j] = (value<<16) + (value<<8) + value; } } info->lcd_gamma_tbl[255] = (lcd_gamma_tbl[items-1][1]<<16) + (lcd_gamma_tbl[items-1][1]<<8) + lcd_gamma_tbl[items-1][1]; memcpy(info->lcd_cmap_tbl, lcd_cmap_tbl, sizeof(lcd_cmap_tbl)); } static s32 LCD_open_flow(u32 sel) { LCD_OPEN_FUNC(sel, LCD_power_on, 30); //open lcd power, and delay 50ms LCD_OPEN_FUNC(sel, LCD_panel_init, 50); //open lcd power, than delay 200ms LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 100); //open lcd controller, and delay 100ms LCD_OPEN_FUNC(sel, LCD_bl_open, 0); //open lcd backlight, and delay 0ms return 0; } static s32 LCD_close_flow(u32 sel) { LCD_CLOSE_FUNC(sel, LCD_bl_close, 0); //close lcd backlight, and delay 0ms LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 0); //close lcd controller, and delay 0ms LCD_CLOSE_FUNC(sel, LCD_panel_exit, 200); //open lcd power, than delay 200ms LCD_CLOSE_FUNC(sel, LCD_power_off, 500); //close lcd power, and delay 500ms return 0; } static void LCD_power_on(u32 sel) { sunxi_lcd_power_enable(sel, 0);//config lcd_power pin to open lcd power0 sunxi_lcd_pin_cfg(sel, 1); } static void LCD_power_off(u32 sel) { sunxi_lcd_pin_cfg(sel, 0); sunxi_lcd_power_disable(sel, 0);//config lcd_power pin to close lcd power0 } static void LCD_bl_open(u32 sel) { sunxi_lcd_pwm_enable(sel); sunxi_lcd_backlight_enable(sel);//config lcd_bl_en pin to open lcd backlight } static void LCD_bl_close(u32 sel) { sunxi_lcd_backlight_disable(sel);//config lcd_bl_en pin to close lcd backlight sunxi_lcd_pwm_disable(sel); } static void LCD_panel_init(u32 sel) { return; } static void LCD_panel_exit(u32 sel) { return ; } //sel: 0:lcd0; 1:lcd1 static s32 LCD_user_defined_func(u32 sel, u32 para1, u32 para2, u32 para3) { return 0; } __lcd_panel_t default_panel = { /* panel driver name, must mach the name of lcd_drv_name in sys_config.fex */ .name = "default_lcd", .func = { .cfg_panel_info = LCD_cfg_panel_info, .cfg_open_flow = LCD_open_flow, .cfg_close_flow = LCD_close_flow, .lcd_user_defined_func = LCD_user_defined_func, }, };
5.开启触摸功能
5.1修改设备树
修改设备树中的twi2节点下增加ctp触摸子节点
&twi2 { ctp@14 { compatible = "allwinner,gsl3680"; device_type = "ctp"; reg = <0x14>; status = "okay"; ctp_name = "gt9xxnew_ts"; ctp_twi_id = <0x2>; ctp_twi_addr = <0x14>; ctp_screen_max_x = <0x400>; ctp_screen_max_y = <0x258>; ctp_revert_x_flag = <0x0>; ctp_revert_y_flag = <0x0>; ctp_exchange_x_y_flag = <0x0>; ctp_int_port = <&pio PH 7 6 1 3 0xffffffff>; ctp_wakeup = <&pio PH 8 1 1 3 0xffffffff>; //ctp-supply = <®_aldo2>; //ctp_power_ldo = <®_dldo1>; //ctp_power_ldo_vol = <3300>; }; };
并在lcd0节点后面使能twi2节点和引脚复用功能。
&twi2 { clock-frequency = <400000>; pinctrl-0 = <&twi2_pins_a>; pinctrl-1 = <&twi2_pins_b>; pinctrl-names = "default", "sleep"; /* For stability and backwards compatibility, we recommend setting ‘twi_drv_used’ to 0 */ twi_drv_used = <0>; twi-supply = <®_dcdc1>; twi_pkt_interval = <0>; //status = "disabled"; status = "okay"; };
5.2 修改内核配置
在Tina的根目录下执行make kernel_menuconfig
book@100ask:~/workspaces/tina-v853-open$ make kernel_menuconfig
进入下面的目录输入Y选中gt9xxnew touchscreen driver触摸驱动
→ Device Drivers → Input device support → Touchscreens <*> gt9xxnew touchscreen driver
如下图所示
保存并退出内核配置界面6.打开lvgl示例程序
在Tina的根目录下,输入
make menuconfig
book@100ask:~/workspaces/tina-v853-open$ make menuconfig
进入如下目录,并输入Y选中lv_examples
> Gui > Littlevgl <*> lv_examples................................. lvgl examples use lvgl-8.1.0
选中后保存并退出配置界面。
7.编译并打包生成镜像
由于我们第一次已经完整编译了系统,现在修改后编译系统的时间就不会特别长,具体时间取决于CPU的性能,在Tina的根目录下执行
make -jN
,其中N为线程数,增加线程数提高编译速度。book@100ask:~/workspaces/tina-v853-open$ make -j4
等待编译完成后,输入pack,打包生成镜像
book@100ask:~/workspaces/tina-v853-open$ pack
打包生成镜像后可以在tina-v853-open/out/v853/100ask/openwrt/目录下找到新的镜像文件
v853_linux_100ask_uart0.img,将该文件拷贝到windows电脑下备用。
8.烧录新镜像启动开发板
使用全志PhoenixSuit烧写工具进行新镜像的烧写,具体方法可以参见《100ASK_V853-PRO 环境配置及编译烧写》。
注意:需要在上电前连接七寸RGB屏,同时连接排线时需要注意排线的线序是否正确。
连接好七寸屏,再连接电源线和两条Type-C数据线,将开关拨向电源接口的方向即可上电启动开发板,在烧写新镜像完成后通过串口工具打开开发板的串口终端,进入Tina Linux的控制台界面,输入lv_examples 0
,即可在七寸RGB屏上显示出LVGL的DEMO程序。root@TinaLinux:/# lv_examples 0 wh=1024x600, vwh=1024x1200, bpp=32, rotated=0 Turn on double buffering. Turn on 2d hardware acceleration. Turn on 2d hardware acceleration rotate.
-
100ASK-V853-PRO开发板支持WIFI和有线网卡
100ASK-V853-PRO开发板支持WIFI和有线网卡
0.前言
通过上一章节,我们已经成功下载Tina SDK包,完成编译并烧写Tina Linux系统,接下来展示100ASK-V853-PRO开发部如何通过WIFI和有线网卡进行上网。
1.使用WIFI实现上网
100ASK-V853-PRO全功能底板上板载有全志XR829,烧录的开发板系统已经进行了适配,可以直接使用,在开发板上输入ifconfig,可以显示已经使能的网络设备。
root@TinaLinux:/# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 84:B0:AC:67:95:EE UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
可以看到wlan0默认已经使能了,如果没有使能可以输入
ifconfig -a
,查看所有网络接口是否存在wlan0设备,如果存在wlan0,则可输入ifconfig wlan0 up
使能wlan0。root@TinaLinux:/# ifconfig -a eth0 Link encap:Ethernet HWaddr 92:A8:E0:01:3D:F9 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:59 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) p2p0 Link encap:Ethernet HWaddr 84:B0:AC:67:95:EF BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 84:B0:AC:67:95:EE UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@TinaLinux:/# ifconfig wlan0 up
使能完成后,由于系统内置wifimanager-v2.0,可以使您快速实现配网,输入
wifi -h
,可以获得参数帮助root@TinaLinux:/# wifi -h ======================================================================= ************************* sta mode Options ************************** ======================================================================= wifi -o sta : open sta mode wifi -f : close sta mode wifi -s : scan wifi wifi -c ssid [passwd] : connect to an encrypted or non-encrypted ap wifi -d : disconnect from ap wifi -a [enable/disable] : Auto reconnect wifi -l [all] : list connected or saved ap information wifi -r [ssid/all] : remove a specified network or all networks wifi -p [softap/ble/xconfig/soundwave] : softap/ble/xconfig/soundwave distribution network ======================================================================= ************************* ap mode Options *************************** ======================================================================= wifi -o ap [ssid] [passwd] : open ap mode : if ssid and passwd is not set, start the default configuration: (allwinner-ap Aa123456) : if only set ssid, start the ap without passwd wifi -l : list current ap mode information wifi -f : close ap mode ======================================================================= *********************** monitor mode Options ************************ ======================================================================= wifi -o monitor : open monitor mode wifi -f : close monitor mode ======================================================================= *************************** other Options *************************** ======================================================================= wifi -D [error/warn/info/debug/dump/exce] : set debug level wifi -g : get system mac addr wifi -m [macaddr] : set system mac addr wifi -h : print help =======================================================================
接下来可以进行扫描wifi,注意扫描前需要检查天线是否安装好,安装位置如下图所示。
检查安装完成后,在开发板的串口终端输入
wifi -s
root@TinaLinux:/# wifi -s root@TinaLinux:/# 1970-01-01 04:00:42:003: WMG_DEBUG [wifi_daemon.c:cmd_handle_thread:702]: get cmd: s 1970-01-01 04:00:42:003: WMG_DEBUG [wifi_daemon.c:cmd_handle_s:196]: cmd handle s: 1970-01-01 04:00:42:004: WMG_DEBUG [src/wmg_sta.c:sta_mode_ctl:463]: =====sta_mode_ctl cmd: 8===== 1970-01-01 04:00:42:004: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:195]: do cmd SCAN 1970-01-01 04:00:42:004: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:203]: do cmd SCAN, reply: OK ... 1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]: bss[00]: bssid=94:d9:b3:b7:c9:0a ssid=100ASK channel=7(freq=2442) rssi=-23 sec=WPA_PSK 1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]: bss[01]: bssid=d0:76:e7:f8:93:d8 ssid=TP-LINK_93D8 channel=6(freq=2437) rssi=-70 sec=WPA_PSK 1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]: bss[02]: bssid=7a:60:5b:29:22:ab ssid= channel=2(freq=2417) rssi=-70 sec=WPA2_PSK 1970-01-01 04:00:45:185: WMG_INFO [wifi_daemon.c:cmd_handle_s:220]: bss[03]: bssid=7a:60:5b:59:22:ab ssid= channel=2(freq=2417) rssi=-70 sec=WPA_PSK 1970-01-01 04:00:45:517: WMG_INFO [wifi_daemon.c:cmd_handle_s:222]: ===Wi-Fi scan successful, total 21 ap(buff size: 60) time 3180.000000 ms===
扫描完成后会打印Wi-Fi scan successful和所用的时间time,可以看到输出信息中的ssid为扫描出来的WIFI名称,注意WIFI名称如果是含有中文字符可能会无法显示。
接下来可以进行连接WIFI进行上网,输入
wifi -c ssid [passwd]
,其中ssid为WIFI名,passwd为密码假设我现在连接的WIFI名称为100ASK,密码为12345678,则需要输入
wifi -c 100ASK 12345678
root@TinaLinux:/# wifi -c 100ASK 12345678 root@TinaLinux:/# 1970-01-01 04:16:49:482: WMG_DEBUG [wifi_daemon.c:cmd_handle_thread:702]: get cmd: c 100ASK 12345678 1970-01-01 04:16:49:482: WMG_DEBUG [wifi_daemon.c:cmd_handle_c:232]: cmd handle c: 100ASK 12345678 1970-01-01 04:16:49:482: WMG_INFO [wifi_daemon.c:cmd_handle_c:256]: connect to sta(100ASK) with pask(12345678) ... 1970-01-01 04:16:51:670: WMG_EXCESSIVE [src/os/linux/event.c:evt_read:128]: Excessive: read event 14 1970-01-01 04:16:51:670: WMG_DUMP [src/os/linux/linux_wpa.c:linux_supplicant_connect_to_ap:1531]: receive wpas event 'CONNECTED' 1970-01-01 04:16:51:671: WMG_EXCESSIVE [src/os/linux/linux_wpa.c:command_to_supplicant:195]: do cmd SAVE_CONFIG 1970-01-01 04:16:51:691: WMG_WARNG [src/os/linux/linux_wpa.c:linux_supplicant_connect_to_ap:1559]: failed to save config to wpa_supplicant.conf 1970-01-01 04:16:51:691: WMG_DEBUG [src/wifimg.c:__wifi_sta_connect:87]: wifi station connect success 1970-01-01 04:16:51:691: WMG_INFO [wifi_daemon.c:cmd_handle_c:265]: ===Wi-Fi connect successful,time 2210.000000 ms=== udhcpc: started, v1.33.2 udhcpc: sending discover udhcpc: sending select for 192.168.0.163 udhcpc: lease of 192.168.0.163 obtained, lease time 122 1970-01-01 04:16:53:689: WMG_DEBUG [src/os/linux/udhcpc.c:start_udhcpc:83]: vflag= 4 1970-01-01 04:16:53:689: WMG_INFO [src/os/linux/udhcpc.c:start_udhcpc:85]: get ip addr 192.168.0.163
可以看到当我们输入完成后,开发板会自动连接到WIFI并会自动获取IP地址,此时我们可以执行ping www.100ask.net,测试wifi是否可以ping通百问网的官方网址,按下Crtl+C结束测试。
root@TinaLinux:/# ping www.100ask.net PING www.100ask.net (118.25.119.100): 56 data bytes 64 bytes from 118.25.119.100: seq=0 ttl=53 time=34.627 ms 64 bytes from 118.25.119.100: seq=1 ttl=53 time=34.894 ms 64 bytes from 118.25.119.100: seq=2 ttl=53 time=34.477 ms 64 bytes from 118.25.119.100: seq=3 ttl=53 time=36.828 ms ^C --- www.100ask.net ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 34.477/35.206/36.828 ms
2.使用有线网卡实现上网
对于有线网卡,我们在我们的补丁文件中已经做了支持,但没有默认使能,需要我们手动进行使能,在开发板的串口终端输入
ifconfig -a
查看所有支持的网络设备,我们可以看到输入后会出现eth0有线网卡的设备。root@TinaLinux:/# ifconfig -a eth0 Link encap:Ethernet HWaddr 92:A8:E0:01:3D:F9 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:59 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) p2p0 Link encap:Ethernet HWaddr 84:B0:AC:67:95:EF BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 84:B0:AC:67:95:EE inet addr:192.168.0.163 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::86b0:acff:fe67:95ee/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2676 errors:0 dropped:14 overruns:0 frame:0 TX packets:34 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:440957 (430.6 KiB) TX bytes:3968 (3.8 KiB)
确认eth0有线网卡的设备存在,此时输入
ifconfig eth0 up
,使能有线网卡。root@TinaLinux:/# ifconfig eth0 up [ 3183.253385] libphy: gmac0: probed [ 3183.302411] sunxi-gmac gmac0 eth0: eth0: Type(6) PHY ID 001cc816 at 0 IRQ poll (gmac0-0:00) [ 3183.322880] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
此时从路由器上引出一条网线,插上开发板的有线网口处。
当网线插入开发板后,开发板的串口终端则会输出以下信息,表示有线网络已经连接成功
root@TinaLinux:/# [ 3318.532310] sunxi-gmac gmac0 eth0: Link is Up - 100Mbps/Full - flow control rx/tx [ 3318.540797] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
此时需要为开发板设备的有线网口获取IP,输入
udhcpc eth0
root@TinaLinux:/# udhcpc eth0 udhcpc: started, v1.33.2 udhcpc: sending discover udhcpc: sending select for 192.168.1.38 udhcpc: lease of 192.168.1.38 obtained, lease time 86400 udhcpc: ip addr add 192.168.1.38/255.255.255.0 broadcast + dev eth0 udhcpc: setting default routers: 192.168.1.1
此时我们可以执行ping www.100ask.net,测试wifi是否可以ping通百问网的官方网址,按下Crtl+C结束测试。
root@TinaLinux:/# ping www.100ask.net PING www.100ask.net (118.25.119.100): 56 data bytes 64 bytes from 118.25.119.100: seq=0 ttl=54 time=34.836 ms 64 bytes from 118.25.119.100: seq=1 ttl=54 time=32.367 ms 64 bytes from 118.25.119.100: seq=2 ttl=54 time=31.824 ms ^C --- www.100ask.net ping statistics --- 4 packets transmitted, 3 packets received, 25% packet loss round-trip min/avg/max = 31.824/33.009/34.836 ms
-
100ASK_V853-PRO开发板 环境配置及编译烧写
0.前言
本章主要介绍关于100ASK-V853-PRO开发板的Tina SDK包的下载和编译打包生成镜像,并将镜像烧录到100ASK-V853-PRO开发板上。在进行100ASK-V853-PRO开发板的环境配置前需要获取配置虚拟机系统,可以参考:https://dongshanpi.com/DongshanPI-D1s/06-ConfigHostEnv/#_3。
全志Linux Tina-SDK开发完全手册:https://tina.100ask.net/
1.下载Tina SDK包
由于Tina SDK包的大小较大,我们将其分卷压缩并放在在了百度网盘中 ,链接:https://pan.baidu.com/s/1TX742vfEde9bMLd9IrwwqA?pwd=sp6a 提取码:sp6a
SDK包位于07_Tina_SDK包目录下,将该目录下的全部文件下载并拷贝到虚拟机下,如下所示
在此目录下打开终端,输入cat tina-v853-open.tar.gz* | tar xz,合并压缩包并解压压缩包。
book@100ask:~/workspaces$ cat tina-v853-open.tar.gz* | tar xz
该过程时间可能会比较长,需要耐心等待。
解压完成后会在当前目录下生成一个tina-v853-open的文件夹,该文件夹即为Tina SDK包的全部目录。
book@100ask:~/workspaces$ ls tina-v853-open tina-v853-open.tar.gz.01 tina-v853-open.tar.gz.03 tina-v853-open.tar.gz.05 tina-v853-open.tar.gz.07 tina-v853-open.tar.gz.09 tina-v853-open.tar.gz.11 tina-v853-open.tar.gz.00 tina-v853-open.tar.gz.02 tina-v853-open.tar.gz.04 tina-v853-open.tar.gz.06 tina-v853-open.tar.gz.08 tina-v853-open.tar.gz.10
2.为Tina SDK包打上百问网V853的补丁包
在当前目录下通过GIT命令下载100ASK-V853-PRO补丁包,对于此补丁包我们也在gitee和百度网盘中提供,百度网盘中位于02_开发工具/【Ubuntu】100ASK_V853-PRO_TinaSDK补丁包/目录下。
book@100ask:~/workspaces$ git clone https://github.com/DongshanPI/100ASK_V853-PRO_TinaSDK.git Cloning into '100ASK_V853-PRO_TinaSDK'... remote: Enumerating objects: 14606, done. remote: Counting objects: 100% (232/232), done. remote: Compressing objects: 100% (167/167), done. remote: Total 14606 (delta 39), reused 225 (delta 34), pack-reused 14374 Receiving objects: 100% (14606/14606), 883.22 MiB | 4.26 MiB/s, done. Resolving deltas: 100% (1491/1491), done. Checking out files: 100% (11560/11560), done.
下载完成后将此文件夹拷贝到tina-v853-open文件夹中
book@100ask:~/workspaces$ cp -rfvd 100ASK_V853-PRO_TinaSDK/* tina-v853-open/
3.编译V853系统
进入tina-v853-open目录下,可以通过ls命令查看当前文件夹下的所有文件
book@100ask:~/workspaces$ cd tina-v853-open/ book@100ask:~/workspaces/tina-v853-open$ ls brandy build buildroot build.sh device kernel openwrt platform prebuilt tools
对于想详细了解Allwinner Tina Linux系统平台,可以在后续访问:https://tina.100ask.net/SdkModule/Linux_SystemSoftware_DevelopmentGuide-01/
建立编译环境,输入 source build/envsetup.sh
book@100ask:~/workspaces/tina-v853-open$ source build/envsetup.sh NOTE: The SDK(/home/book/workspaces/tina-v853-open) was successfully loaded load openwrt... ok Please run lunch next for openwrt. load buildroot,bsp...ok Please run ./build.sh config next for buildroot,bsp.
选择编译的开发板,输入lunch
book@100ask:~/workspaces/tina-v853-open$ lunch You're building on Linux Lunch menu... pick a combo: 1 v853-100ask-tina 2 v853-vision-tina Which would you like?:
这里是需要您选择编译哪个方案的开发板,这里输入1,选择v853-100ask-tina,再按回车即可。
选择完成后会倒数8秒,让您阅读许可协议,阅读完成后,会询问您是否接受上述条款协议。输入y,再按回车即同意以上条款。
book@100ask:~/workspaces/tina-v853-open$ lunch You're building on Linux Lunch menu... pick a combo: 1 v853-100ask-tina 2 v853-vision-tina Which would you like?: 1 Jump to longan autoconfig /home/book/workspaces/tina-v853-open/build.sh autoconfig -o openwrt -i v853 -b 100ask -n default Before using this files, please make sure that you note the following important information. ********************************************************************** Copyright (c) 2019-2022 Allwinner Technology Co., Ltd. ALL rights reserved. Allwinner is a trademark of Allwinner Technology Co.,Ltd., registered in the the People's Republic of China and other countries. All Allwinner Technology Co.,Ltd. trademarks are used with permission. DISCLAIMER THIRD PARTY LICENCES MAY BE REQUIRED TO IMPLEMENT THE SOLUTION/PRODUCT. IF YOU NEED TO INTEGRATE THIRD PARTY'S TECHNOLOGY (SONY, DTS, DOLBY, AVS OR MPEGLA, ETC.) IN ALLWINNERS'SDK OR PRODUCTS, YOU SHALL BE SOLELY RESPONSIBLE TO OBTAIN ALL APPROPRIATELY REQUIRED THIRD PARTY LICENCES. ALLWINNER SHALL HAVE NO WARRANTY, INDEMNITY OR OTHER OBLIGATIONS WITH RESPECT TO MATTERS COVERED UNDER ANY REQUIRED THIRD PARTY LICENSE. YOU ARE SOLELY RESPONSIBLE FOR YOUR USAGE OF THIRD PARTY'S TECHNOLOGY. THIS SOFTWARE IS PROVIDED BY ALLWINNER"AS IS" AND TO THE MAXIMUM EXTENT PERMITTED BY LAW, ALLWINNER EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION REGARDING THE TITLE, NON-INFRINGEMENT, ACCURACY, CONDITION, COMPLETENESS, PERFORMANCE OR MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL ALLWINNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************************************************************** You can read /home/book/workspaces/tina-v853-open/build/disclaimer/Allwinnertech_Disclaimer(Cn_En)_20181122.md for detailed information. You read time left 8 seconds.... I have already read, understood and accepted the above terms? [Y/N]y
确认同意条款后,系统会自动配置环境变量
You select Yes, Build continue.... ========ACTION List: mk_autoconfig -o openwrt -i v853 -b 100ask -n default;======== options : INFO: Prepare toolchain ... INFO: kernel defconfig: generate /home/book/workspaces/tina-v853-open/kernel/linux-4.9/.config by /home/book/workspaces/tina-v853-open/device/config/chips/v853/configs/100ask/linux-4.9/config-4.9 INFO: Prepare toolchain ... make: Entering directory '/home/book/workspaces/tina-v853-open/kernel/linux-4.9' HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf *** Default configuration is based on '../../../../../device/config/chips/v853/configs/100ask/linux-4.9/config-4.9' # # configuration written to .config # make: Leaving directory '/home/book/workspaces/tina-v853-open/kernel/linux-4.9' INFO: clean buildserver Usage: kill [options] <pid> [...] Options: <pid> [...] send signal to every <pid> listed -<signal>, -s, --signal <signal> specify the <signal> to be sent -l, --list=[<signal>] list all signal names, or convert one to a name -L, --table list all signal names in a nice table -h, --help display this help and exit -V, --version output version information and exit For more details see kill(1). INFO: prepare_buildserver
编译系统,输入make,输入完成后系统将会开始编译
book@100ask:~/workspaces/tina-v853-open$ make ===There is tina environment.=== Note: make is the shell functon in envsetup.sh. == action: openwrt_build, action_args: == ========ACTION List: build_linuxdev ;======== options : INFO: ---------------------------------------- INFO: build linuxdev ... INFO: chip: sun8iw21p1 INFO: platform: linux INFO: kernel: linux-4.9 INFO: board: 100ask INFO: output: /home/book/workspaces/tina-v853-open/out/v853/100ask/openwrt INFO: ---------------------------------------- INFO: don't build dtbo ... INFO: build arisc INFO: build_bootloader: brandy_path= /home/book/workspaces/tina-v853-open/brandy/brandy-2.0 grep: /home/book/workspaces/tina-v853-open/brandy/brandy-2.0/spl/Makefile: No such file or directory build for sun8iw21p1_defconfig ... Prepare arm toolchain ... ...//此部分编译输出信息省略 Building kernel /home/book/workspaces/tina-v853-open/kernel/linux-4.9/output/lib/modules/4.9.191 CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h CHK scripts/mod/devicetable-offsets.h CHK include/generated/timeconst.h CHK include/generated/bounds.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h DTC arch/arm/boot/dts/board.dtb Kernel: arch/arm/boot/Image is ready Building modules, stage 2. MODPOST 27 modules Kernel: arch/arm/boot/zImage is ready Kernel: arch/arm/boot/uImage is ready 'arch/arm/boot/Image' -> 'output/bImage' 'arch/arm/boot/uImage' -> 'output/uImage' 'arch/arm/boot/zImage' -> 'output/zImage' Copy rootfs.cpio.gz for arm Building modules [GPU]: No GPU type is configured in /home/book/workspaces/tina-v853-open/kernel/linux-4.9/.config. regenerate rootfs cpio 16149 blocks 16150 blocks build_ramfs Copy boot.img to output directory ... ./scripts/build.sh sun8iw21p1 compile Kernel successful INFO: ---------------------------------------- INFO: build Tina OK. INFO: ----------------------------------------
等待编译完成,此部分编译时间由电脑CPU等决定,第一次编译系统的时间比较长,请耐心等待。等待输出编译Tina OK即编译成功。
4.打包生成100ASK-V853-PRO系统镜像
编译完成后,输入pack,可以直接将刚刚编译完成的系统打包生成可烧写到板载EMMC上的镜像。
book@100ask:~/workspaces/tina-v853-open$ pack /home/book/workspaces/tina-v853-open/build/pack -c sun8iw21p1 -i v853 -p openwrt -b 100ask -k linux-4.9 -d uart0 -v none -m normal -w none -n default INFO: /home/book/workspaces/tina-v853-open/out/v853/common/keys copying tools file copying configs file copying product configs file ... Dragon execute image.cfg SUCCESS ! ----------image is at---------- 33M /home/book/workspaces/tina-v853-open/out/v853/100ask/openwrt/v853_linux_100ask_uart0.img pack finish
等待打包完成,打包完成后可以根据上面的输出信息提示的目录下找到v853_linux_100ask_uart0.img镜像,将此镜像文件拷贝到Windows电脑中。
5.使用PhoenixSuit烧写工具进行系统的烧写
全志USB烧录驱动包:AllwinnerUSBFlashDeviceDriver
全志线刷工具:AllwinnertechPhoeniSuit
在连接开发板后需要注意,虚拟机可能会拦截串口或者USB,选择连接到主机即可。
5.1 安装全志USB驱动
全志USB烧录驱动包:AllwinnerUSBFlashDeviceDriver
如果是第一次使用,需要安装全志USB驱动,如果已经安装过全志USB驱动即可跳转到5.2继续进行烧写系统。
在我们连接好开发板的12V电源线,并将两条Type-C分别连接到开发板和电脑端以后,将开关拨向靠近12V电源的方向即可将开发板上电。然后先按住 100ASK-V853-PRO开发板 FEL 烧写模式按键,之后按一下reset复位键,就可以自动进入烧写模式。
这时我们可以看到电脑设备管理器 通用串行总线控制器 部分弹出一个 未知设备 ,这个时候我们就需要把我们提前下载好的 全志USB烧录驱动 进行修改,然后将解压缩过的 全志USB烧录驱动 压缩包,解压缩,可以看到里面有这么几个文件。
InstallUSBDrv.exe drvinstaller_IA64.exe drvinstaller_X86.exe UsbDriver/ drvinstaller_X64.exe install.bat
对于wind7系统的同学,只需要以管理员 打开
install.bat
脚本,等待安装,在弹出的 是否安装驱动的对话框里面,点击安装即可。对于wind10/wind11系统的同学,需要在设备管理器里面进行手动安装驱动。
如下图所示,在第一次插入OTG设备,进入烧写模式设备管理器会弹出一个未知设备。
接下来鼠标右键点击这个未知设备,在弹出的对话框里, 点击浏览我计算机以查找驱动程序软件。
之后在弹出新的对话框里,点击浏览找到我们之前下载好的 usb烧录驱动文件夹内,找到
UsbDriver/
这个目录,并进入,之后点击确定即可。注意进入到
UsbDriver/
文件夹,然后点击确定,如下图所示。此时,我们继续点击 下一页 按钮,这时系统就会提示安装一个驱动程序。
在弹出的对话框里,我们点击 始终安装此驱动程序软件 等待安装完成。
安装完成后,会提示,Windows已成功更新你的驱动程序。
最后我们可以看到,设备管理器 里面的未知设备 变成了一个
USB Device(VID_1f3a_efe8)
的设备,这时就表明设备驱动已经安装成功。安装完成USB驱动后后续即可正常使用烧录功能。
5.2 烧写系统
全志线刷工具:AllwinnertechPhoeniSuit
在我们连接好开发板的12V电源线,并将两条Type-C分别连接到开发板和电脑端以后,打开PhoenixSuit烧写工具,
打开软件后 软件主界面如下图所示
接下来 我们需要切换到 **一键刷机**窗口。如下图所示,点击红框标号1,在弹出的新窗口内,我们点击 红框2 **浏览** 找到我们刚刚编译出来的 V853系统镜像v853_linux_100ask_uart0.img,选中镜像后,点击红框3 **全盘擦除升级** 。
这时 我们拿起已经连接好的开发板,先按住 FEL 烧写模式按键,之后按一下 RESET 系统复位键,就可以自动进入烧写模式并开始烧写。
烧写时会提示烧写进度条,烧写完成后,会在红框处提示固件烧写成功。
6.进入Tina系统
烧写完成,我们可以使用串口工具MobaXterm进入串口查看,软件我们放在百度网盘的02_开发工具/【Windows】MobaXterm(串口工具 ssh工具合集)
默认情况下系统会自动安装串口设备驱动,如果没有自动安装,可以使用驱动精灵来自动安装。 * 对于Windows系统 此时Windows设备管理器 在 端口(COM和LPT) 处会多出一个串口设备,一般是以
USB-Enhanced-SERIAL CH9102
开头,您需要留意一下后面的具体COM编号,用于后续连接使用。如上图,COM号是96,我们接下来连接所使用的串口号就是96。
打开软件后新建会话后,第1步选择串口功能,第2步在串口端选择CH9102的串口,第3步波特率设置115200,第4步流控选择None,第5步选择OK。
选择后进入了串口界面,此时可能会没有输出信息的情况,按下回车键即可进入tina开发板控制台。
如果此时想重新查看启动信息,可以在终端输入reboot,或者在开发板上按下reset键。
上述为启动完成的信息,可以看到Tina Linux的标识
-
回复: 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT
号外号外
预计R128模组价格 29.99,
最小核心板价格 59.99 ,
还会做一个带屏幕摄像头的开发板套装版本 预计价格 499。 -
全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT
模组
Pin2Pin ESP32S3
可以直接无缝焊接使用(但是软件不是兼容的,R128支持的是FreeRTOS系统)。
来一张超高清对比图
系统已经启动,来一张启动log图证明一下:
启动流程示意图
(屏蔽盖镭雕丝印打错了,应该是R128-S2,之前是想做S3的,因为样片还没到位,先做了S2)
补充价格信息(预估):
预计R128模组价格 29.99,
最小核心板价格 59.99 ,
还会做一个带屏幕摄像头的开发板套装版本 预计价格 499。
(芯片价格全志原厂还不让透露,只能说非常美丽,不然我们模组也做不到29.99这么便宜) -
回复: DongshanPI-D1s 烧录tina linux到spinor存储器后,无法通过xfel在编程了
我们也发现了这个问题,目前怀疑是 xfel无法完整擦除 spi nor导致的错误,可以尝试先使用 凤凰烧写工具 烧写一下 这个镜像,之后再通过 xfel去下载裸机程序,就可以正常使用了!
一定要选择 为 分区擦除升级
镜像文件: rtos_16M.img正常输出
-
测试V853发现一个TF卡功能发现很诡异的现象,有经验的小伙伴可以看出问题么?
插上TF卡,进入uboot下执行 sunxi_card0_probe 正常识别,也可以读取文件到内存,看起来是正常的
但是一旦内核启动,就会出现如下类似的错误, 似乎是数据发不过去,但是看起来又能识别到卡设备 以及容量大小,
尝试过 修改 sdc0的时钟速率至 50Mhz 发现问题依旧。[ 1.856663] [ 1.867528] bt_fdi debugfs_init [ 1.870551] cpufreq: cpufreq_online: CPU0: Running at unlisted freq: 900000 KHz [ 1.907055] cpufreq: cpufreq_online: CPU0: Unlisted initial frequency changed to: 912000 KHz [ 1.947581] cpuidle: enable-method property 'psci' found operations [ 1.956905] sunxi-mmc sdc2: SD/MMC/SDIO Host Controller Driver(v3.59 2022-4-21 13:40) [ 1.966118] sunxi-mmc sdc2: ***ctl-spec-caps*** 308 [ 1.972441] sunxi-mmc sdc2: No vdmmc regulator found [ 1.978135] sunxi-mmc sdc2: No vd33sw regulator found [ 1.983818] sunxi-mmc sdc2: No vd18sw regulator found [ 1.989516] sunxi-mmc sdc2: No vq33sw regulator found [ 1.995175] sunxi-mmc sdc2: No vq18sw regulator found [ 2.001272] sunxi-mmc sdc2: set host busy [ 2.005820] mmc:failed to get gpios [ 2.010070] sunxi-mmc sdc2: sdc set ios:clk 0Hz bm PP pm UP vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.047034] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.087018] sunxi-mmc sdc2: detmode:alway in(non removable) [ 2.087042] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.095399] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.096464] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm OD pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.107303] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm OD pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.107366] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm OD pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.120200] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm OD pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.164892] sunxi-mmc sdc0: SD/MMC/SDIO Host Controller Driver(v3.59 2022-4-21 13:40) [ 2.173905] sunxi-mmc sdc0: ***ctl-spec-caps*** 408 [ 2.179433] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.192162] sunxi-mmc sdc0: No vqmmc regulator found [ 2.197770] sunxi-mmc sdc0: No vdmmc regulator found [ 2.203843] sunxi-mmc sdc0: set host busy [ 2.208793] sunxi-mmc sdc2: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing MMC-HS(SDR20) dt B [ 2.219672] sunxi-mmc sdc0: sdc set ios:clk 0Hz bm PP pm UP vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.219787] sunxi-mmc sdc0: no vqmmc,Check if there is regulator [ 2.237441] sunxi-mmc sdc2: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 1 timing MMC-HS(SDR20) dt B [ 2.248424] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.259518] sunxi-mmc sdc2: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 8 timing MMC-HS(SDR20) dt B [ 2.270762] sunxi-mmc sdc2: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 8 timing MMC-DDR52 dt B [ 2.281334] sunxi-mmc sdc0: detmode:data3 [ 2.281820] sunxi-mmc sdc1: SD/MMC/SDIO Host Controller Driver(v3.59 2022-4-21 13:40) [ 2.281951] sunxi-mmc sdc1: ***ctl-spec-caps*** 8 [ 2.282020] sunxi-mmc sdc1: No vmmc regulator found [ 2.282024] sunxi-mmc sdc1: No vqmmc regulator found [ 2.282028] sunxi-mmc sdc1: No vdmmc regulator found [ 2.282032] sunxi-mmc sdc1: No vd33sw regulator found [ 2.282036] sunxi-mmc sdc1: No vd18sw regulator found [ 2.282039] sunxi-mmc sdc1: No vq33sw regulator found [ 2.282043] sunxi-mmc sdc1: No vq18sw regulator found [ 2.295774] sunxi-mmc sdc1: set host busy [ 2.295832] mmc:failed to get gpios [ 2.296054] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.318288] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.349519] sunxi-mmc sdc1: detmode:manually by software [ 2.350641] usbcore: registered new interface driver usbhid [ 2.350644] usbhid: USB HID core driver [ 2.354488] [sound 1158][DAUDIO snd_sunxi_regulator_init] regulator missing or invalid [ 2.366160] sunxi-snd-mach soc@03000000:codec_mach: sunxi-snd-codec <-> soc@03000000:codec_plat mapping ok [ 2.369075] sunxi-snd-mach soc@03000000:daudio0_mach: snd-soc-dummy-dai <-> 2032000.daudio0_plat mapping ok [ 2.370875] Netfilter messages via NETLINK v0.30. [ 2.371215] nf_conntrack version 0.5.0 (8192 buckets, 32768 max) [ 2.371369] ctnetlink v0.93: registering with nfnetlink. [ 2.371665] ip_tables: (C) 2000-2006 Netfilter Core Team [ 2.372779] NET: Registered protocol family 10 [ 2.374428] NET: Registered protocol family 17 [ 2.374463] NET: Registered protocol family 15 [ 2.374654] Bluetooth: RFCOMM TTY layer initialized [ 2.374669] Bluetooth: RFCOMM socket layer initialized [ 2.374688] Bluetooth: RFCOMM ver 1.11 [ 2.375679] Registering SWP/SWPB emulation handler [ 2.500978] mmc0: new DDR MMC card at address 0001 [ 2.508469] axp2101_charger: the gauge have been reset, need to reload param [ 2.508469] [ 2.518086] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.518825] mmcblk0: mmc0:0001 BJTD4R 29.1 GiB [ 2.519079] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.519146] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.521814] sunxi-mmc sdc1: sdc set ios:clk 400000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.522950] mmcblk0boot0: mmc0:0001 BJTD4R partition 1 4.00 MiB [ 2.523220] mmcblk0boot1: mmc0:0001 BJTD4R partition 2 4.00 MiB [ 2.529348] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.529554] mmcblk0rpmb: mmc0:0001 BJTD4R partition 3 4.00 MiB [ 2.530201] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.535544] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.541775] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.541853] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.542932] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.564920] mmcblk0: p1 p2 p3 p4 p5 p6 p7 [ 2.567069] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.607998] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.614005] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.614026] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.626449] sunxi-mmc sdc1: sdc set ios:clk 300000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.637789] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.642435] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.653188] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.659178] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.659202] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.660279] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.687801] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.731857] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.742619] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.742643] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.750722] sunxi-mmc sdc1: sdc set ios:clk 200000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.757784] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.768536] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.779308] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.785177] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.785192] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.786276] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm UP vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.814206] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.836936] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 2.848445] ***CTP***GTP driver init [ 2.848518] get ctp_power is fail, -22 [ 2.848521] get ctp_power_ldo_vol is fail, -22 [ 2.848528] sunxi_ctp_startup: ctp_power_io is invalid. [ 2.848599] get ctp_screen_max_x is fail, -22 [ 2.853146] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.857460] sunxi-mmc sdc1: smc 2 p1 err, cmd 52, RTO !! [ 2.857620] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.864954] sunxi-mmc sdc1: sdc set ios:clk 100000Hz bm PP pm ON vdd 21 width 1 timing LEGACY(SDR12) dt B [ 2.872105] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.877092] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.877268] ***CTP***info.ctp_used:1 [ 2.877270] ***CTP***info.twi_id:2 [ 2.877279] ***CTP***info.screen_max_x:1024 [ 2.877281] ***CTP***info.screen_max_y:600 [ 2.877284] ***CTP***info.revert_x_flag:0 [ 2.877286] ***CTP***info.revert_y_flag:0 [ 2.877287] ***CTP***info.exchange_x_y_flag:0 [ 2.877289] ***CTP***info.irq_gpio_number:231 [ 2.877291] ***CTP***info.wakeup_gpio_number:232 [ 2.877296] ***CTP******CTP*** ctp_wakeup:status:0,ms = 0 [ 2.883321] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.889435] sunxi-mmc sdc1: smc 2 p1 err, cmd 5, RTO !! [ 2.889483] sunxi-mmc sdc1: sdc set ios:clk 0Hz bm PP pm OFF vdd 0 width 1 timing LEGACY(SDR12) dt B [ 2.977586] ***CTP******CTP*** ctp_wakeup:status:1,ms = 0 [ 3.002574] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 3.015390] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 3.028599] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing LEGACY(SDR12) dt B [ 3.074391] mmc1: host does not support reading read-only switch, assuming write-enable [ 3.085867] sunxi-mmc sdc0: sdc set ios:clk 400000Hz bm PP pm ON vdd 22 width 1 timing SD-HS(SDR25) dt B [ 3.096602] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 1 timing SD-HS(SDR25) dt B [ 3.107767] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 4 timing SD-HS(SDR25) dt B [ 3.118967] sunxi_i2c_do_xfer()1974 - [i2c0] incomplete xfer (status: 0x20, dev addr: 0x14) [ 3.119165] sunxi_i2c_do_xfer()1974 - [i2c0] incomplete xfer (status: 0x48, dev addr: 0x5d) [ 3.119411] twi_stop()544 - engine-mode: bus state: 0x0, isn't idle [ 3.119423] sunxi_i2c_do_xfer()1974 - [i2c1] incomplete xfer (status: 0xff, dev addr: 0x14) [ 3.119616] twi_stop()544 - engine-mode: bus state: 0x0, isn't idle [ 3.119627] sunxi_i2c_do_xfer()1974 - [i2c1] incomplete xfer (status: 0xff, dev addr: 0x5d) [ 3.119788] sunxi_i2c_do_xfer()1974 - [i2c2] incomplete xfer (status: 0x48, dev addr: 0x5d) [ 3.119973] sunxi_i2c_do_xfer()1974 - [i2c3] incomplete xfer (status: 0x20, dev addr: 0x14) [ 3.120135] sunxi_i2c_do_xfer()1974 - [i2c3] incomplete xfer (status: 0x48, dev addr: 0x5d) [ 3.120296] sunxi_i2c_do_xfer()1974 - [i2c4] incomplete xfer (status: 0x20, dev addr: 0x14) [ 3.129842] sunxi_i2c_do_xfer()1974 - [i2c4] incomplete xfer (status: 0x48, dev addr: 0x5d) [ 3.129955] sunxi-rtc rtc: setting system clock to 1970-01-01 00:24:03 UTC (1443) [ 3.130867] clk: Not disabling unused clocks [ 3.130988] usb-vbus: disabling [ 3.147714] axp2101-dcdc2: disabling [ 3.234021] axp2101-rtcldo1: disabling [ 3.245950] axp2101-aldo2: disabling [ 3.250039] mmc1: new high speed SDHC card at address 5048 [ 3.257206] mmcblk1: mmc1:5048 SD32G 29.7 GiB [ 3.263503] axp2101-aldo3: disabling [ 3.267566] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.267602] sunxi-mmc sdc0: retry:start [ 3.267606] sunxi-mmc sdc0: retry:stop [ 3.267643] sunxi-mmc sdc0: retry:stop recover [ 3.267669] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.267674] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.267679] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.267694] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.273967] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.274002] sunxi-mmc sdc0: retry:start [ 3.274006] sunxi-mmc sdc0: retry:stop [ 3.274028] sunxi-mmc sdc0: retry:stop recover [ 3.274051] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.274056] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.274060] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.274072] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.278406] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.278431] sunxi-mmc sdc0: retry:start [ 3.278435] sunxi-mmc sdc0: retry:stop [ 3.278457] sunxi-mmc sdc0: retry:stop recover [ 3.278481] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 ** 13 printk messages dropped ** [ 3.287869] sunxi-mmc sdc0: retry:stop ** 1 printk messages dropped ** [ 3.287914] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.287919] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 5 printk messages dropped ** [ 3.293396] sunxi-mmc sdc0: retry:stop recover [ 3.293420] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.293424] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.293428] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.293441] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.298936] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.298961] sunxi-mmc sdc0: retry:start [ 3.298965] sunxi-mmc sdc0: retry:stop [ 3.298986] sunxi-mmc sdc0: retry:stop recover [ 3.299008] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.299013] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.299017] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.299029] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.304807] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.304832] sunxi-mmc sdc0: retry:start [ 3.304836] sunxi-mmc sdc0: retry:stop [ 3.304856] sunxi-mmc sdc0: retry:stop recover [ 3.304879] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.304884] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.304888] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.304899] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.310782] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.310806] sunxi-mmc sdc0: retry:start [ 3.310810] sunxi-mmc sdc0: retry:stop [ 3.310831] sunxi-mmc sdc0: retry:stop recover [ 3.310854] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.310858] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.317214] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.321608] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.325893] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.330978] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.336432] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.342009] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.347878] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.353820] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.360176] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.364566] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.368866] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.373940] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.379416] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 ** 7 printk messages dropped ** [ 3.379514] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 ** 7 printk messages dropped ** [ 3.379593] sunxi-mmc sdc0: send manual stop command failed 100 ** 6 printk messages dropped ** [ 3.379662] sunxi-mmc sdc0: retry:stop ** 7 printk messages dropped ** [ 3.379733] sunxi-mmc sdc0: retry:give up ** 13 printk messages dropped ** [ 3.542050] sunxi-mmc sdc0: sdc set ios:clk 50000000Hz bm PP pm ON vdd 22 width 1 timing SD-HS(SDR25) dt B ** 78 printk messages dropped ** [ 3.616320] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.625188] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.634049] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.642914] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.651772] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.660640] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.669503] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.678300] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.688431] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.696008] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.703887] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.704221] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.718622] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 ** 7 printk messages dropped ** [ 3.718730] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 ** 7 printk messages dropped ** [ 3.718814] sunxi-mmc sdc0: send manual stop command failed 100 ** 6 printk messages dropped ** [ 3.718882] sunxi-mmc sdc0: retry:stop ** 7 printk messages dropped ** [ 3.718954] sunxi-mmc sdc0: retry:give up ** 8 printk messages dropped ** [ 3.719217] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD RTO !! ** 38 printk messages dropped ** [ 3.728549] sunxi-mmc sdc0: retry:stop recover ** 1 printk messages dropped ** [ 3.728578] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 39 printk messages dropped ** [ 3.772177] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.780888] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.789608] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 ** 7 printk messages dropped ** [ 3.798316] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.807039] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.815712] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 ** 7 printk messages dropped ** [ 3.824405] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.833103] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.841700] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.851659] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.859082] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.866783] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 ** 7 printk messages dropped ** [ 3.876261] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 ** 7 printk messages dropped ** [ 3.876362] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 ** 7 printk messages dropped ** [ 3.876442] sunxi-mmc sdc0: send manual stop command failed 100 ** 7 printk messages dropped ** [ 3.876529] sunxi-mmc sdc0: retry:stop recover ** 6 printk messages dropped ** [ 3.876582] sunxi-mmc sdc0: retry:give up ** 8 printk messages dropped ** [ 3.893682] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD RTO !! ** 37 printk messages dropped ** [ 3.902871] sunxi-mmc sdc0: retry:stop ** 6 printk messages dropped ** [ 3.911576] sunxi-mmc sdc0: retry:start [ 3.911580] sunxi-mmc sdc0: retry:stop [ 3.911601] sunxi-mmc sdc0: retry:stop recover [ 3.911624] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.911628] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.911633] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.911645] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.920265] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.920282] sunxi-mmc sdc0: retry:start [ 3.920286] sunxi-mmc sdc0: retry:stop [ 3.920308] sunxi-mmc sdc0: retry:stop recover [ 3.920330] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.920335] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.920339] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.920351] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.928955] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.928983] sunxi-mmc sdc0: retry:start [ 3.928987] sunxi-mmc sdc0: retry:stop [ 3.929008] sunxi-mmc sdc0: retry:stop recover [ 3.929030] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.929035] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.929039] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.929050] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.937685] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.937702] sunxi-mmc sdc0: retry:start [ 3.937706] sunxi-mmc sdc0: retry:stop [ 3.937727] sunxi-mmc sdc0: retry:stop recover [ 3.937749] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.937754] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.937758] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.937769] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.946362] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.946384] sunxi-mmc sdc0: retry:start [ 3.946388] sunxi-mmc sdc0: retry:stop [ 3.946409] sunxi-mmc sdc0: retry:stop recover [ 3.946431] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.946436] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.946440] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.946452] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.955057] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.955072] sunxi-mmc sdc0: retry:start [ 3.955076] sunxi-mmc sdc0: retry:stop [ 3.955096] sunxi-mmc sdc0: retry:stop recover [ 3.955119] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.955123] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.955128] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.955139] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.963745] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.963767] sunxi-mmc sdc0: retry:start [ 3.963771] sunxi-mmc sdc0: retry:stop [ 3.963791] sunxi-mmc sdc0: retry:stop recover [ 3.963813] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.963818] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710000 [ 3.963822] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.963833] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.972446] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.972467] sunxi-mmc sdc0: retry:start [ 3.972471] sunxi-mmc sdc0: retry:stop [ 3.972491] sunxi-mmc sdc0: retry:stop recover [ 3.972514] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.972518] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.972522] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.972534] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.981293] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.981335] sunxi-mmc sdc0: retry:start [ 3.981339] sunxi-mmc sdc0: retry:stop [ 3.981368] sunxi-mmc sdc0: retry:stop recover [ 3.981393] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.981397] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.981402] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.981416] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.990160] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.990222] sunxi-mmc sdc0: retry:start [ 3.990226] sunxi-mmc sdc0: retry:stop [ 3.990253] sunxi-mmc sdc0: retry:stop recover [ 3.990278] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 3.990283] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710110 [ 3.990287] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.990302] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 3.998940] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 3.998969] sunxi-mmc sdc0: retry:start [ 3.998973] sunxi-mmc sdc0: retry:stop [ 3.998996] sunxi-mmc sdc0: retry:stop recover [ 3.999019] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 3.999024] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 3.999028] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 3.999040] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.007661] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.007713] sunxi-mmc sdc0: retry:start [ 4.007718] sunxi-mmc sdc0: retry:stop [ 4.007741] sunxi-mmc sdc0: retry:stop recover [ 4.007764] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.007769] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 4.007774] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.007787] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.016310] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.016326] sunxi-mmc sdc0: retry:start [ 4.016330] sunxi-mmc sdc0: retry:stop [ 4.016350] sunxi-mmc sdc0: retry:stop recover [ 4.016373] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.016378] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 4.016382] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.016394] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.026271] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.026301] sunxi-mmc sdc0: retry:start [ 4.026305] sunxi-mmc sdc0: retry:stop [ 4.026326] sunxi-mmc sdc0: retry:stop recover [ 4.026349] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 4.026354] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 4.026358] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.026371] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.034507] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.034529] sunxi-mmc sdc0: retry:start [ 4.034533] sunxi-mmc sdc0: retry:stop [ 4.034555] sunxi-mmc sdc0: retry:stop recover [ 4.034578] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 4.034582] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 4.034587] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.034598] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.042237] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.042261] sunxi-mmc sdc0: retry:start [ 4.042265] sunxi-mmc sdc0: retry:stop [ 4.042285] sunxi-mmc sdc0: retry:stop recover [ 4.042308] sunxi-mmc sdc0: REG_DRV_DL: 0x00000000 [ 4.042312] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710220 [ 4.042317] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.042329] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.051723] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD SBE !! [ 4.051738] sunxi-mmc sdc0: retry:start [ 4.051742] sunxi-mmc sdc0: retry:stop [ 4.051763] sunxi-mmc sdc0: retry:stop recover [ 4.051785] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.051789] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 [ 4.051794] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.051805] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.051827] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD RTO !! [ 4.051839] sunxi-mmc sdc0: retry:start [ 4.051843] sunxi-mmc sdc0: retry:stop [ 4.051862] sunxi-mmc sdc0: retry:stop recover [ 4.051874] sunxi-mmc sdc0: send manual stop command failed 100 [ 4.051893] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.051897] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 [ 4.051902] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.051913] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.051929] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD RTO !! [ 4.051941] sunxi-mmc sdc0: retry:start [ 4.051945] sunxi-mmc sdc0: retry:stop [ 4.051964] sunxi-mmc sdc0: retry:stop recover [ 4.051975] sunxi-mmc sdc0: send manual stop command failed 100 [ 4.051994] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.051999] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 [ 4.052003] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.052013] sunxi-mmc sdc0: *****retry:re-send cmd***** [ 4.052030] sunxi-mmc sdc0: smc 1 p0 err, cmd 18, RD RTO !! [ 4.052042] sunxi-mmc sdc0: retry:start [ 4.052046] sunxi-mmc sdc0: retry:stop [ 4.052064] sunxi-mmc sdc0: retry:stop recover [ 4.052075] sunxi-mmc sdc0: send manual stop command failed 100 [ 4.052094] sunxi-mmc sdc0: REG_DRV_DL: 0x00030000 [ 4.052099] sunxi-mmc sdc0: REG_SD_NTSR: 0x81710330 [ 4.052103] sunxi-mmc sdc0: REG_NTDL_HS400: 0x20000110 [ 4.052107] sunxi-mmc sdc0: sunxi v5p3x retry give up [ 4.052111] sunxi-mmc sdc0: retry:set phase failed or over retry times [ 4.052117] sunxi-mmc sdc0: retry:give up [ 4.059576] sunxi-mmc sdc0: smc 1 p0 err, cmd 13, RTO !! [ 4.059606] mmcblk1: error -110 sending status command, retrying [ 4.059628] sunxi-mmc sdc0: smc 1 p0 err, cmd 13, RTO !! [ 4.059643] mmcblk1: error -110 sending status command, retrying [ 4.059662] sunxi-mmc sdc0: smc 1 p0 err, cmd 13, RTO !! [ 4.059671] mmcblk1: error -110 sending status command, aborting [ 4.059681] blk_update_request: I/O error, dev mmcblk1, sector 0 [ 4.059689] Buffer I/O error on dev mmcblk1, logical block 0, async page read [ 4.059721] mmcblk1: unable to read partition table [ 4.992471] axp2101-aldo4: disabling [ 4.997172] axp2101-bldo2: disabling [ 5.001857] axp2101-dldo2: disabling [ 5.006539] axp2101-cpusldo: disabling [ 5.011201] ALSA device list: [ 5.014522] #0: audiocodec [ 5.017757] #1: snddaudio0 [ 5.025112] VFS: Mounted root (squashfs filesystem) readonly on device 179:4. [ 5.035563] devtmpfs: mounted [ 5.040631] Freeing unused kernel memory: 1024K
-
100ASK-V853-PRO开发板回来了,这周将会发布重磅资料!!!
这是一款百问网推出的首款 嵌入式AI 开发板
使用BTB + 全功能 底板的方式设计,专门针对于 嵌入式开发学习使用,
请忽略核心板的绿色,这只是第一批,后续我们会使用亚蓝!
底板将所有的V853核心板信号全部引出,支持主芯片的所有功能开发
屏幕支持 RGB、MIPI 摄像头支持双路 CSI以及单路CSI,
板载4路USB HUB 芯片
支持百兆以太网,以及WIFI 蓝牙无线通信。
拥有全面的 GPADC 用户按键,
以及一个LEDC可编程RGB灯
提供 512MB DDR3 8/32GB Emmc配置,以及1GB DDR3 /32GB Emmc超高配。
让性能可以充分发挥。
更多资料 敬请期待!!! -
回复: D1 Tina-SDK V2.1编译直接报错!
@baiwen
强行替换 tina-sdk v2.0的 lichee/brandy-2.0 到V2.1版本,可以暂时略过BOOT部分,继续往下编译,报错再说。
-
回复: 通过CK-Link lite 连接dongshanPI-D1s失败
长按FEL键,同时按一下 RESET键 会自动进入烧录模式。 这时再使用T-Head server 连接。
-
D1 Tina-SDK V2.1编译直接报错!
今天看到 全志在线 服务中心 更新了 D1-H 的TIna-SDK ,看到修复了很多BUG,决定下载下来 应用更新到DongshanPI开发板上。
获取源码后,编译 make直接提示 gcc不存在,似乎是环境那里的问题。
-
回复: 请问,D1 Tina-SDK内的 FT5x 内核模块驱动源码在哪里呢?
@baiwen 多次尝试FT5x依旧各种问题,主要是I2C 数据无法传输,个人认为是 I2C Core和 内核内的 edt-ft5x06.c 驱动不兼容导致得,具体原因还要排查,因不想浪费太多时间,尝试另一个 FT的驱动,修改后,安装,简单测试可以正常使用。
ft5336@38 { compatible = "focaltech,fts"; reg = <0x38>; status = "okay"; interrupt-parent = <&pio>; interrupts = <PB 3 IRQ_TYPE_LEVEL_LOW>; focaltech,reset-gpio = <&pio PB 2 GPIO_ACTIVE_HIGH>; focaltech,irq-gpio = <&pio PB 3 IRQ_TYPE_LEVEL_LOW>; focaltech,max-touch-number = <5>; focaltech,display-coords = <0 0 800 480>; };
-
请问,D1 Tina-SDK内的 FT5x 内核模块驱动源码在哪里呢?
最近在给D1/s支持一款 MIPI显示屏,屏幕型号用的是
FT5336G
看到 Tina_SDK 配置里面有这个选项,想着 应该是有现成的源码,如果那位大佬有,方便的话请提供一下,如果没有就只能慢慢魔改支持了。
支持Nezha MangoPI YuzukiHD DongshanPI等系列。
-
基于DongshanPI-D1S开发板的《RISC-V体系结构编程与实践》学习教程来啦
感谢
笨叔在我们适配书籍代码的过程中给予指导与帮助!
感谢全志给我们提供这么给力的芯片以及资源支持!
感谢平头哥优先给我们提供 支持TUI GDB工具以及相关问题解答!话不多说,直接上文档~ RISC-V体系结构编程与实践_基于百问网D1S的学习指南.pdf
《RISC-V体系结构编程与实践》是张天飞老师编写的书,必定是RISC-V架构的经典书。里面的内容丰富而有深度,他使用QEMU来做实验。但是在真实开发板上,这些源码不能直接使用。我们把书上的源码移植到了DongshanPI-D1S上,并且录制相关的学习视频。
DongshanPI-D1S是百问网推出的一款基于RISC-V 架构的学习裸机、RTOS的最小开发板。集成CKLink调试器,支持OTG烧录、GDB调试、串口打印,并将主芯片所有的信号全部引出,其中左右两侧兼容了树莓派的电源信号定义,可以很方便扩展模块。
- 板子资料:http://download.100ask.net/boards/Allwinner/D1s/index.html
- 购买地址:https://item.taobao.com/item.htm?id=688098912622
资料分两部分:开发板通用资料、《RISC-V体系结构编程与实践》的D1S源码。前者比较庞大,放在百度网盘;后者放在书籍配套的GITEE网站。
-
开发板通用资料:
打开 http://download.100ask.net/boards/Allwinner/D1s/index.html ,可以看到“D1s课程配套通用资料”对应的百度网盘地址,请自行下载。本课程主要使用下图所示的软件:
-
《RISC-V体系结构编程与实践》的D1S源码:
打开 https://gitee.com/weidongshan/riscv_programming_practice 登录后按如下界面操作:
点击“克隆/下载”按钮之后,如下点击“下载ZIP”即可:
如果你没有点击“下载ZIP”,而是使用GIT命令来下载,那么下载成功后还需要执行如下命令:
git checkout DongShanPI_D1
-
回复: MangoPi Dual T113 主线内核编译记录
@evler 在 MangoPi Dual T113 主线内核编译记录 中说:
sudo dd if=awboot.bin of=/dev/sdd bs=1024 seek=8
神奇,使用百问网的t113 pro开发板,不管改不改内核设备树里面的 uart接口,都是boot启动不了 内核,明天再排查排查
-
请问,有人在D1s成功运行过主线Linux系统么?
修改 sun20i-d1-spl nboot/main/boot0_head.c/*unsigned int dram_para[32] ;*/ { 0x00000210, 0x00000002, 0x007b7bf9, 0x00000000, 0x000000d2, 0x00000000, 0x00000e73, 0x00000002, 0x00000000, 0x00000000, 0x00471992, 0x0131a10c, 0x00057041, 0xb4787896, 0x00000000, 0x48484848, 0x00000048, 0x1621121e, 0x00000000, 0x00000000, 0x00000000, 0x00030010, 0x00000035, 0x34000000, }, /*normal_gpio_cfg uart_ctrl[2];*/ { {5, 3, 6, 1, 0xff, 0xff, {0} }, /*PE3: 6--RX*/ {5, 2, 6, 1, 0xff, 0xff, {0} }, /*PE2: 6--TX*/ },
修改主线内uboot设备树
uart0引脚为PE2 PE3,打包方式保持不变
烧写启动,提示如下
-
请教各位大佬,D1的start.s __start部分是参考哪里怎么实现的? 还有dram.c又是从那里得到的这些数据,最后的mksunxi 也是搞不懂依据在哪
最近在使用D1s录制RISC-V体系架构与C编程的课程,参考xboot作者的裸机实验(一直联系不到作者本人),目前可以直接烧录在DongshanPI-D1s spinor上运行,但是有几个问题 不明所以,不知道到底是怎么得来的,有懂的大佬能帮忙解析一下么?
https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/tree/master/source/start.S
https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/tree/master/source/sys-dram.c
https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/blob/master/source/tools/mksunxi.c
#include <stdio.h> #include <string.h> #include <stdint.h> #include <stdlib.h> #if 0 static inline uint32_t __swab32(uint32_t x) { return ( (x<<24) | (x>>24) | \ ((x & (uint32_t)0x0000ff00UL)<<8) | \ ((x & (uint32_t)0x00ff0000UL)>>8) ); } #define cpu_to_le32(x) (__swab32((uint32_t)(x))) #define le32_to_cpu(x) (__swab32((uint32_t)(x))) #else #define cpu_to_le32(x) (x) #define le32_to_cpu(x) (x) #endif struct boot_head_t { uint32_t instruction; uint8_t magic[8]; uint32_t checksum; uint32_t length; uint8_t spl_signature[4]; uint32_t fel_script_address; uint32_t fel_uenv_length; uint32_t dt_name_offset; uint32_t reserved1; uint32_t boot_media; uint32_t string_pool[13]; }; int main (int argc, char *argv[]) { struct boot_head_t * h; FILE * fp; char * buffer; int buflen, filelen; uint32_t * p; uint32_t sum; int i, l, loop; if(argc != 2) { printf("Usage: mksunxi <bootloader>\n"); return -1; } fp = fopen(argv[1], "r+b"); if(fp == NULL) { printf("Open bootloader error\n"); return -1; } fseek(fp, 0L, SEEK_END); filelen = ftell(fp); fseek(fp, 0L, SEEK_SET); if(filelen <= sizeof(struct boot_head_t)) { fclose(fp); printf("The size of bootloader too small\n"); return -1; } buflen = (filelen + 0x2000) & ~(0x2000 - 1); buffer = malloc(buflen); memset(buffer, 0, buflen); if(fread(buffer, 1, filelen, fp) != filelen) { printf("Can't read bootloader\n"); free(buffer); fclose(fp); return -1; } h = (struct boot_head_t *)buffer; p = (uint32_t *)h; l = le32_to_cpu(h->length); h->checksum = cpu_to_le32(0x5F0A6C39); loop = l >> 2; for(i = 0, sum = 0; i < loop; i++) sum += le32_to_cpu(p[i]); h->checksum = cpu_to_le32(sum); fseek(fp, 0L, SEEK_SET); if(fwrite(buffer, 1, buflen, fp) != buflen) { printf("Write bootloader error\n"); free(buffer); fclose(fp); return -1; } fclose(fp); printf("The bootloader head has been fixed\n"); return 0; }
-
嵌入式LinuxAI开发卷起来!!!
感谢@YuzukiTsuru 大佬的认可和支持,授权给我们生产销售V851s蜥蜴 H616变色龙开发板,目前开发板已经售卖,文档已经在逐步支持并发布中,争取给大家提供一个最有趣完善的快速上手版本。
https://dongshanpi.com/YuzukiHD-Lizard/01-BoardIntroduction/
不过单只有快速上手怎么能满足大家的需求呢?
为此我们专门花了非常大的精力提供一个 针对于全志Tina-sdk源码的在线开发文档中心,可以深入学习了解更多关于Tina-SDK产品级的知识。
https://tina.100ask.net/
我们的文档都是采用了CC4.0 协议,大家可以直接COPY使用,另外我们会逐步完整支持 D1-H D1s T113 V851 V853等系列。
顺便给大家透露一下 我们自己也做了一款全功能的 V853教育开发板,感兴趣的同学可以关注一下哦!
-
回复: 请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!
@aozima 我专门对比了 xfel 和 sun20i_d1_spl MQ 发现是一样的,
-
请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!
经过漫长的折腾工作,DongshanPI-D1s V2版已经回来,但是无奈 发现了很多坑!!!
我们想把它作为一个RISC-V的RTOS教育开发板,但是看起来它更适合跑Linux系统问题一
BL702模拟CKlink固件 无法和TF卡同时使用,这也就是说,我们无法同时用TF卡和Cklink功能
详情看: https://forums.100ask.net/t/topic/1683/3问题二
单独使用Cklink烧录Yoc系统,原本计划使用它们的那套工程来进行烧录,但是最后发现是一个product bin文件来进行的烧录操作。
看来没法通过Yoc的CKlink烧录方式进行单独烧录了。
换个思路使用Melis系统那套打包工具进行单独替换 RTOS系统来加载启动,但是最后发现 也是一堆bin文件 按照特定的格式打包才可以,最后使用凤凰烧录工具进行烧录,也是麻烦。问题三
抛开上述两种使用 平头哥Cklink 和全志的凤凰烧写工具打包烧录,
第三种全部使用社区主线的 源码,进入uboot下进行烧录操作,
但是我参考了xfel里面的 ddr2参数,启动到boot部分就凉凉,难不成D1s和F133的ddr参数不同?
然后无奈,继续尝试使用把Tina-SDK里面的 spi nor镜像 boot0部分 boot-package部分,单独抽取出来,进行烧写,可是xfel在spi nor有系统的状态下一直无法擦除。无解最后只能还按照我们支持的tina buildroot那套,把kernel换成rtos镜像,然后打包成一个可以烧录的镜像 最后使用凤凰烧写工具烧写启动,但是这样也太麻烦了吧。。。
各位大佬 有什么好的建议 或者思路 欢迎留言,不胜感激!!!
-
请教各位大佬,Melis是如何将编译出来的 melis.elf app等文件打包进melis.img生产一个可以烧录的系统!
这次我们也设计了一个 板载CkLink的D1s RISC-V教育开发板,目的是为了用来学习RISC-V体系架构与编程,裸机开发,YoC RTOS系统(已支持helloword),RTT等系统。
这两天有看到RT-Smart支持了D1s的RTT系统,但是是基于SDCard或SD-Nand存储实现,因为我们的板子flash是NorFlash,所以想研究一下怎么在NorFlash运行。
编译RTT
- 参考 https://mp.weixin.qq.com/s/XznlHTqiTijgJ8uwPWXBBw
最后编译生成对应的sd.bin文件,可以直接烧录,但是我想烧录到NorFlash 要怎么做呢?
根据RISC-V的启动流程来看,opensbi-->u-boot-->rtt kernel -->app
因为存储介质的区别,我要确定烧录的地址,这里无从得知,
那面我需要获取到 前面 opensbi u-boot是从哪里来的,这个我一开始认为是全志提供,后来经过对比,发现并不是,询问RTT内部人员,他们也不知从何而来,这就比较尴尬,我只能除了IDA换个思路去解决。
分析Melis
- 全志有一款自家RTT系统,已经完整支持了D1s/F133,但是因为某些原因,无法对外公开,但是它却支持了NorFlash的系统,大家都知道Melis系统底层也是RTT的内核,所以我是不是可以把Melis里面的打包过程 单独领出来,去给 rt-smart支持,这样就能完美解决 不同flash支持的问题了。
分析1
- 每个芯片厂家都有自己的一套特定启动流程,烧录标准,以及打包的特定格式,所以简单的打包就是指定头部 指定分区文件,用特定的工具把一堆bin按照特定的要求生成一个img镜像格式,使用凤凰烧写工具烧写并启动。https://bbs.aw-ol.com/topic/1532/分析tina打包流程-并在buildroot上来实现打包生成tina镜像-支持phoenixsuit烧写?_=1668677556734
分析2
- 在D1s Melis系统里面 它的打包也是从 /D1s-Melis$ vim ./tools/scripts/pack_img.sh 开始入手
我们可以通过执行pack命令 来看 对应的过程。
INFO: running the function do_dragon with file "image_nor.cfg sys_partition_nor.fex" ==================================== show "sys_partition_nor.fex" message ------------------------------------ [mbr] mbr_size : 16 Kbyte ------------------------------------ partition_name : bootA partition_size : 2048 downloadfile : melis_pkg_nor.fex melis_pkg_nor.fex size : 608K byte ------------------------------------ partition_name : ROOTFS partition_size : 10240 downloadfile : data_udisk.fex data_udisk.fex size : 5.0M byte ------------------------------------ partition_name : UDISK ------------------------------------ /home/book/D1s-Melis/tools/packtool/ /home/book/D1s-Melis/out/d1s-nezha/image Begin Parse sys_partion.fex Add partion melis_pkg_nor.fex MELIS_PKG_NOR_FEX Add partion very melis_pkg_nor.fex MELIS_PKG_NOR_FEX FilePath: melis_pkg_nor.fex FileLength=98000Add partion data_udisk.fex DATA_UDISK_FEX00 Add partion very data_udisk.fex DATA_UDISK_FEX00 FilePath: data_udisk.fex FileLength=500000sys_config_nor.fex Len: 0x1132d config_nor.fex Len: 0xc000 split_xxxx.fex Len: 0x200 sys_partition_nor.fex Len: 0xc81 sunxi.fex Len: 0x12c00 boot0_nor.fex Len: 0xc000 boot0_card.fex Len: 0x10000 boot_pkg_uboot_nor.fex Len: 0x4c000 boot_pkg_uboot_nor.fex Len: 0x4c000 u-boot_nor.fex Len: 0x48000 fes1.fex Len: 0x7de0 usbtool.fex Len: 0x24400 usbtool_crash.fex Len: 0x1ec00 aultools.fex Len: 0x288b7 aultls32.fex Len: 0x2511f cardtool.fex Len: 0x11e00 cardscript.fex Len: 0x766 sunxi_gpt.fex Len: 0x2000 sunxi_mbr_nor.fex Len: 0x4000 dlinfo.fex Len: 0x4000 arisc.fex Len: 0xf melis_pkg_nor.fex Len: 0x98000 Vmelis_pkg_nor.fex Len: 0x4 data_udisk.fex Len: 0x500000 Vdata_udisk.fex Len: 0x4 BuildImg 0 Dragon execute image_nor.cfg SUCCESS ! -------------------- ----------image is at---------- /home/book/D1s-Melis/out/d1s-nezha/melis_d1s-nezha_uart0_8Mnor.img do_finish 100ask +++++++++++++ 3 INFO: pack finish
- 首先最后打包成一个完整可以烧录的镜像 没有变化 还是使用 dragon 根据分区配置文件统一生成。
do_finish 555 do_dragon image_$1.cfg sys_partition_$1.fex do_dragon() 602 dragon $@
- 继续倒着 往上看
INFO: packing for melis INFO: making data image for 8M nor INFO: running the function make_data_image for partition data [mbr] size = 16 [partition_start] [partition] name = bootA size = 2048 downloadfile = "melis_pkg_nor.fex" user_type = 0x8000 [partition] name = ROOTFS size = 10240 downloadfile = "data_udisk.fex" user_type = 0x8000 [partition] name = UDISK user_type = 0x8000 ROOTFS:5120:"data_udisk.fex" UDISK:1984:"None" =bootA:1024:"melis_pkg_nor.fex"= ROOTFS:5120:"data_udisk.fex" UDISK:1984:"None" =ROOTFS:5120:"data_udisk.fex"= data_udisk.fex try to create image: ROOTFS to data_udisk.fex with size 5242880 ------------------------------------------------------------- make minfs image file [/home/book/D1s-Melis/out/d1s-nezha/image/data_udisk.fex] succeeded image config size : [ 5242880] image used size : [ 4715036] DEntry count : [ 90] DEntry length : [ 13148] FData length : [ 4701212] ------------------------------------------------------------- /home/book/D1s-Melis/projects/d1s-nezha/data/UDISK data_udisk.fex make_data_image 100ask +++++++++++++++++++++ bootA:1024:"melis_pkg_nor.fex" ROOTFS:5120:"data_udisk.fex" UDISK:1984:"None" =UDISK:1984:"None"= INFO: running the function do_finish "sys_partition_nor.bin" partitation file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_partition_nor.bin mbr_name file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sunxi_mbr_nor.fex download_name file Path=/home/book/D1s-Melis/out/d1s-nezha/image/dlinfo.fex this is not a partition key gpt_head->header_crc32 = 0x8c195ae6 GPT----part num 3--- gpt_entry: 128 gpt_header: 92 GPT:bootA : 20 81f GPT:ROOTFS : 820 301f GPT:UDISK : 3020 302f update gpt file ok update mbr file ok WARN: 2021-01-19 do not create full binary because new uboot INFO: running the function create_rtos_full_img for pure binary imagefile 3968 8 ----------------mbr convert to gpt start--------------------- out: sunxi_gpt_nor.fex source: sunxi_mbr_nor.fex input_logic_offset: 96 input_flash_size: 8M gpt partition entry crc32 = 0x25cd3a50 gpt header crc32 = 0xb8d9d416 GPT----part num 3--- gpt_entry: 128 gpt_header: 92 GPT:bootA : 20 81f GPT:ROOTFS : 820 301f GPT:UDISK : 3020 3f9f update gpt file ok ----------------mbr convert to gpt end--------------------- boot0: boot0_nor.fex mbr: sunxi_gpt_nor.fex partition: sys_partition_nor.bin UDISK_partition_size: 3968 sector outfile: melis_8Mnor.fex logic_start: 48K total_image_size: 8M load file: boot0_nor.fex ok load file: sunxi_gpt_nor.fex ok load file: sys_partition_nor.bin ok part name=bootA file name:melis_pkg_nor.fex part size:2048 sector load file: melis_pkg_nor.fex ok part name=ROOTFS file name:data_udisk.fex part size:10240 sector load file: data_udisk.fex ok part name=UDISK this is not a partition key merge_package ok ----------rtos full image is at---------- /home/book/D1s-Melis/out/d1s-nezha/melis_8Mnor.fex
这部分是最终生成的包含Melis系统镜像的命令,实际的程序在
do_finish 522 if [ $1 = "nor" ] ; then 523 update_mbr sys_partition_$1.bin 1 sunxi_mbr_$1.fex 541 if [ "x$1" = "xnor" ] ; then 542 if [ ${current_rtos_full_img_size} -eq 8 ]; then 543 pack_warn "2021-01-19 do not create full binary because new uboot";create_rtos_full_img ${LOGICAL_UDISK_PARTS_KB_REMAIN_FOR_8M} ${current_rtos_full_img_size} prepare_for_8Mnor 880 pack_info "making data image for 8M nor" 881 make_data_image sys_partition_nor.fex ${LOGICAL_PARTS_KB_FOR_8M} LOGICAL_UDISK_PARTS_KB_REMAIN_FOR_8M 882 sed -i 's/\(imagename = .*\)_[^_]*nor/\1_8Mnor/g' image_nor.cfg 883 IMG_NAME=$(awk '{if($3~/^'${PACK_PLATFORM}'.*img$/)print$3}' image_nor.cfg) 884 current_rtos_full_img_size=8 create_rtos_full_img 839 echo ----------------mbr convert to gpt start--------------------- 840 mbr_convert_to_gpt --source ${mbr_source_file} \ 841 ¦ ¦ --out ${gpt_file} \ 842 ¦ ¦ --input_logic_offset $((${LOGIC_START} * 1024 / 512 )) \ 843 ¦ ¦ --input_flash_size ${2} 844 echo ----------------mbr convert to gpt end--------------------- 846 cp ${gpt_file} sunxi_gpt.fex 847 848 cp ${boot0_file_name} boot0.fex 853 merge_full_rtos_img --out ${full_rtos_img_name} \ 854 ¦ ¦ ¦ --boot0 ${boot0_file_name} \ 855 ¦ ¦ ¦ --mbr ${gpt_file} \ 856 ¦ ¦ ¦ --logic_start ${LOGIC_START} \ 857 ¦ ¦ ¦ --partition sys_partition_nor.bin \ 858 ¦ ¦ ¦ --UDISK_partition_size ${1} \ 859 ¦ ¦ ¦ --total_image_size ${2}
从上面可以看出来是根据 我们指定的 分区文件 来最终生成一个 包含完整系统镜像的这么一个系统。
但是只有这些还是不够,我要知道 Melis.elf到底是包含在了哪里。
我们看一下这个分区定义,整个打包操作步骤是没有变化,还是更新头部,转换fex为bin格式,然后使用 特定的命令进行完整打包
D1s-Melis/projects/d1s-nezha/configs$ cat sys_partition_nor.fex
从上图可以看到,他的分区只有3个,首先排除最后一个分区UDISK,是一个没有文件的空分区,然后 就是ROOTFS分区和 bootA分区了,然后根据 downloadfile名称来看,更像是bootA分区里面存放了melis.elf文件。
但是这个我没法解包,也无从得知是哪里得到,无果,继续往上看- 打包过程分析
book@virtual-machine:~/D1s-Melis$ pack INFO: temporarily Enter pack directory: "/home/book/D1s-Melis/out/d1s-nezha/image", will be back when terminated INFO: copying config/boot binary/phoenix plugin files /home/book/D1s-Melis/tools/phoenixplugin/aultls32.fex /home/book/D1s-Melis/tools/phoenixplugin/aultools.fex /home/book/D1s-Melis/tools/phoenixplugin/cardtool.fex /home/book/D1s-Melis/tools/phoenixplugin/split_xxxx.fex /home/book/D1s-Melis/tools/phoenixplugin/Tools.fex /home/book/D1s-Melis/tools/phoenixplugin/usbtool_crash.fex /home/book/D1s-Melis/tools/phoenixplugin/usbtool.fex /home/book/D1s-Melis/tools/phoenixplugin/usbtool_test.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/arisc.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/cardscript.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/cardscript_product.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/config.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/split_xxxx.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sunxi.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_card.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_card_product.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_nand.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_config_nor.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card_dump.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_card_product.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nand_dump.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nand.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nor_dump.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/sys_partition_nor.fex /home/book/D1s-Melis/projects/d1s-nezha/configs/env.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/image_card.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/image_card_product.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/image_nand.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/image_nor.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/package_boot0.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_card.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_card_product.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_nand.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/package_uboot_nor.cfg /home/book/D1s-Melis/projects/d1s-nezha/configs/rootfs.ini /home/book/D1s-Melis/projects/d1s-nezha/version/version_base.mk /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_nand.bin:boot0_nand.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_nor.bin:boot0_nor.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_card.bin:boot0_card.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/boot0_sun20iw1p1_card.bin:boot0_card_product.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/fes1_sun20iw1p1.bin:fes1.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/u-boot_sun20iw1p1_nand.bin:u-boot_nand.fex /home/book/D1s-Melis/projects/d1s-nezha/bin/u-boot_sun20iw1p1_nor_uart0.bin:u-boot_nor.fex /home/book/D1s-Melis/projects/d1s-nezha/epos.img:epos.img Compressed 1203760 bytes into 836271 bytes ==> 69.47% INFO: define image file name is:melis_d1s-nezha_uart0_nor.img pack boot nor package GetPrivateProfileSection read to end content_count=2 32+0 records in 32+0 records out 32768 bytes (33 kB, 32 KiB) copied, 0.000412117 s, 79.5 MB/s fes1 file Path=/home/book/D1s-Melis/out/d1s-nezha/image/fes1.fex script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin script update fes1 ok uboot file Path=/home/book/D1s-Melis/out/d1s-nezha/image/u-boot_nor.fex script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin debug_mode =1 secure_mode =0 GetPrivateProfileSection read to end content_count=1 toc1 file Path=/home/book/D1s-Melis/out/d1s-nezha/image/boot_package.fex script file Path=/home/book/D1s-Melis/out/d1s-nezha/image/sys_config_nor.bin cant get board_id_enable script update toc1 ok
最上面这部分来看,就是检查一下文件是否完整,然后指定头部等配置文件,将其转换成特定的格式并等待后续使用,这部分并没有特别有用信息。
相关操作都在do_common
待解决
那么问题来了,melis.elf到底包含在了那个 分区里面 是bootA还是ROOTFS,亦或者其它我不知道的,
具体单板工程下的 epos.img是做什么用的?
/D1s-Melis/projects/d1s-nezha/sbi-bin$ cat osinit 里面为什么指定了 melis30.elf文件,但是这个文件到底是何时被编译打包进去,前面为什么有target这个 gdb调试地址,是否是调试时才需要的。
另外但从启动信息看
第一部分首先是 boot0 也就是norflash ddr头部信息,然后是一个 所谓的复合bin里面应该包含了opensbi部分 melis kernel本身,可能还有uboot部分和env启动参数部分。
后面就是加载melis kernel的log日志信息了,请有知道的大佬提点一二!!!后面我尝试从 烧录 编译好的Melis系统镜像打印信息来分析 烧录过程,看是否可以反推出对应位置等。
- 参考 https://mp.weixin.qq.com/s/XznlHTqiTijgJ8uwPWXBBw
-
V853我们来了!!!
感谢全志在线的大力支持,感谢晕哥的芯片支持,也感谢YuzuKi,芒果大佬的指点,我们终于设计好了 V853开发板核心板与底板,接下来将会进行打样生产,作为AI入门 与 多媒体框架学习的配套专用开发板。
- 下图,左侧是V853核心板是BTB封装,右侧是YuzuKi大佬赏脸打100ask设计的V851s最小板。
- V851S最小板,我们会将售价做到低至99元单板,接口丰富而且完善,详细的参数可以 @YuzukiTsuru
- 下面这张图是 配套的 项目1底板,我们暂且叫他 全功能底板,这个板子是用来学习Tina-SDK 开发与摄像头显示等,同时,我们正在设计针对于不同场景需要的不同底板,可以共用一款核心板。
-
DongshanPI-D1板载RISC-V调试器,作为一款全国产RV64底层学习开发板,期待您的加入!!!
经过漫长的等待,百问网联合 全志在线x阿里平头哥xSipeed 共创的全国产RISC-V体系架构学习开发板来了,它的定位主要是偏向于喜欢研究底层的同学,如操作系统,裸机程序,驱动模块等。
板子板载了D1s的RISC-V调试器,可以直接进行芯片级的调试开发,同时平头哥会针对这个板子支持CDK RT-Thread也会去支持,当然还有更多更多。
另外,我们内部主要支持Linux和一款RTOS,对于有能力且感兴趣的同学,可以在此开发板上发挥你的长处,实现一些功能,我们将会给予赞助,可以是开发板,也可以是 我们的课程,当然也可以是Money。
我们征集的内容不限,可以是 一个新的系统 一个Linux传感器模块的完整示例 也可以是一个新的裸机Demo ,反正您做的越多 我们能赞助给您的费用就越多。- 擅长做底层系统的:可以在我们的板子上移植新的操作系统,可以是FreeRTOS、RT-Tthread、YoC等
- 擅长做组件的:制作一个组件库/包,如MQTT 库等
- 擅长做应用的:开发一个应用,比如传感器的一个混合应用
如果您想要实现相应的功能,可以在 https://forums.100ask.net/t/topic/1307/4 下面留言,当然也可以在此贴下留言,同时为了避免大家做重复的工作,尽量一个模块/系统 最多3个人做。
-
回复: 第一次调试D1 MIPI DSI 发现一些奇怪问题,也不知道到底是哪里出了问题。。。
- 亮屏成功,这个时钟和时序真的是离谱,错一个都不行,试了两天,自己粗心误把HBP认为HeightBP,另外接下来我们将提供 带电容触摸版本 以及 不带电容触摸版本,可直接连接到 MangoPI MQ-Pro AW-OL NeZha公板,T113等版本,为大家提供一个高性价比的双LANE 480x800的MIPI屏模块。
- 亮屏成功,这个时钟和时序真的是离谱,错一个都不行,试了两天,自己粗心误把HBP认为HeightBP,另外接下来我们将提供 带电容触摸版本 以及 不带电容触摸版本,可直接连接到 MangoPI MQ-Pro AW-OL NeZha公板,T113等版本,为大家提供一个高性价比的双LANE 480x800的MIPI屏模块。
-
第一次调试D1 MIPI DSI 发现一些奇怪问题,也不知道到底是哪里出了问题。。。
最近想给D1配一款MIPI显示屏,但是在调试过程中出现了一些很奇怪得现象,因为是第一次接触MIPI显示屏,所以有点不知所以。。
其中屏幕使用的是 ILI9806E DSI接口分辨率为480x800
目前认为主要是 屏幕时序不对导致的问题,但是屏厂能提供的资料非常有限,还是需要慢慢排查....
- 设备树节点定义
&lcd0 { lcd_used = <1>; lcd_driver_name = "tft08006"; lcd_backlight = <100>; lcd_if = <4>; lcd_x = <480>; lcd_y = <800>; lcd_width = <52>; lcd_height = <52>; lcd_dclk_freq = <25>; lcd_pwm_used = <1>; lcd_pwm_ch = <2>; lcd_pwm_freq = <1000>; lcd_pwm_pol = <0>; lcd_pwm_max_limit = <255>; lcd_hbp = <20>; lcd_ht = <835>; lcd_hspw = <10>; lcd_vbp = <20>; lcd_vt = <510>; lcd_vspw = <5>; lcd_dsi_if = <0>; lcd_dsi_lane = <2>; lcd_lvds_if = <0>; lcd_lvds_colordepth = <0>; lcd_lvds_mode = <0>; lcd_frm = <0>; lcd_hv_clk_phase = <0>; lcd_hv_sync_polarity= <0>; lcd_io_phase = <0x0000>; lcd_gamma_en = <0>; lcd_bright_curve_en = <0>; lcd_cmap_en = <0>; lcd_fsync_en = <0>; lcd_fsync_act_time = <1000>; lcd_fsync_dis_time = <1000>; lcd_fsync_pol = <0>; deu_mode = <0>; lcdgamma4iep = <22>; smart_color = <90>; lcd_gpio_0 = <&pio PG 13 GPIO_ACTIVE_HIGH>; pinctrl-0 = <&dsi4lane_pins_a>; pinctrl-1 = <&dsi4lane_pins_b>; };
- 驱动示例定义
/* drivers/video/sunxi/disp2/disp/lcd/tft08006.c * * Copyright (c) 2021 Allwinnertech Co., Ltd. * * tft08006 panel driver * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include "tft08006.h" static void lcd_power_on(u32 sel); static void lcd_power_off(u32 sel); static void lcd_bl_open(u32 sel); static void lcd_bl_close(u32 sel); static void lcd_panel_init(u32 sel); static void lcd_panel_exit(u32 sel); #define panel_reset(sel, val) sunxi_lcd_gpio_set_value(sel, 0, val) static void lcd_cfg_panel_info(struct panel_extend_para *info) { u32 i = 0, j = 0; u32 items; u8 lcd_gamma_tbl[][2] = { {0, 0}, {15, 15}, {30, 30}, {45, 45}, {60, 60}, {75, 75}, {90, 90}, {105, 105}, {120, 120}, {135, 135}, {150, 150}, {165, 165}, {180, 180}, {195, 195}, {210, 210}, {225, 225}, {240, 240}, {255, 255}, }; u32 lcd_cmap_tbl[2][3][4] = { { {LCD_CMAP_G0, LCD_CMAP_B1, LCD_CMAP_G2, LCD_CMAP_B3}, {LCD_CMAP_B0, LCD_CMAP_R1, LCD_CMAP_B2, LCD_CMAP_R3}, {LCD_CMAP_R0, LCD_CMAP_G1, LCD_CMAP_R2, LCD_CMAP_G3}, }, { {LCD_CMAP_B3, LCD_CMAP_G2, LCD_CMAP_B1, LCD_CMAP_G0}, {LCD_CMAP_R3, LCD_CMAP_B2, LCD_CMAP_R1, LCD_CMAP_B0}, {LCD_CMAP_G3, LCD_CMAP_R2, LCD_CMAP_G1, LCD_CMAP_R0}, }, }; items = sizeof(lcd_gamma_tbl) / 2; for (i = 0; i < items - 1; i++) { u32 num = lcd_gamma_tbl[i + 1][0] - lcd_gamma_tbl[i][0]; for (j = 0; j < num; j++) { u32 value = 0; value = lcd_gamma_tbl[i][1] + ((lcd_gamma_tbl[i + 1][1] - lcd_gamma_tbl[i][1]) * j) / num; info->lcd_gamma_tbl[lcd_gamma_tbl[i][0] + j] = (value << 16) + (value << 8) + value; } } info->lcd_gamma_tbl[255] = (lcd_gamma_tbl[items - 1][1] << 16) + (lcd_gamma_tbl[items - 1][1] << 8) + lcd_gamma_tbl[items - 1][1]; memcpy(info->lcd_cmap_tbl, lcd_cmap_tbl, sizeof(lcd_cmap_tbl)); } static s32 lcd_open_flow(u32 sel) { LCD_OPEN_FUNC(sel, lcd_power_on, 10); LCD_OPEN_FUNC(sel, lcd_panel_init, 10); LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 50); LCD_OPEN_FUNC(sel, lcd_bl_open, 0); return 0; } static s32 lcd_close_flow(u32 sel) { LCD_CLOSE_FUNC(sel, lcd_bl_close, 0); LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 0); LCD_CLOSE_FUNC(sel, lcd_panel_exit, 200); LCD_CLOSE_FUNC(sel, lcd_power_off, 500); return 0; } static void lcd_power_on(u32 sel) { panel_reset(sel, 1); sunxi_lcd_delay_ms(10); panel_reset(sel, 0); sunxi_lcd_delay_ms(5); panel_reset(sel, 1); sunxi_lcd_delay_ms(5); sunxi_lcd_pin_cfg(sel, 1); } static void lcd_power_off(u32 sel) { sunxi_lcd_pin_cfg(sel, 0); sunxi_lcd_delay_ms(20); panel_reset(sel, 0); sunxi_lcd_delay_ms(5); } static void lcd_bl_open(u32 sel) { sunxi_lcd_pwm_enable(sel); } static void lcd_bl_close(u32 sel) { sunxi_lcd_pwm_disable(sel); } #define REGFLAG_DELAY 0XFC #define REGFLAG_END_OF_TABLE 0xFD /* END OF REGISTERS MARKER */ struct LCM_setting_table { u8 cmd; u32 count; u8 para_list[32]; }; static struct LCM_setting_table lcm_tft08006_setting[] = { {0xFF, 3, {0x98, 0x81, 0x03} }, {0x01, 1, {0x00} }, {0x02, 1, {0x00} }, {0x03, 1, {0x53} }, {0x04, 1, {0x53} }, {0x05, 1, {0x13} }, {0x06, 1, {0x04} }, {0x07, 1, {0x02} }, {0x08, 1, {0x02} }, {0x09, 1, {0x00} }, {0x0a, 1, {0x00} }, {0x0b, 1, {0x00} }, {0x0c, 1, {0x00} }, {0x0d, 1, {0x00} }, {0x0e, 1, {0x00} }, {0x0f, 1, {0x00} }, {0x10, 1, {0x00} }, {0x11, 1, {0x00} }, {0x12, 1, {0x00} }, {0x13, 1, {0x00} }, {0x14, 1, {0x00} }, {0x15, 1, {0x00} }, {0x16, 1, {0x00} }, {0x17, 1, {0x00} }, {0x18, 1, {0x00} }, {0x19, 1, {0x00} }, {0x1a, 1, {0x00} }, {0x1b, 1, {0x00} }, {0x1c, 1, {0x00} }, {0x1d, 1, {0x00} }, {0x1e, 1, {0xc0} }, {0x1f, 1, {0x80} }, {0x20, 1, {0x02} }, {0x21, 1, {0x09} }, {0x22, 1, {0x00} }, {0x23, 1, {0x00} }, {0x24, 1, {0x00} }, {0x25, 1, {0x00} }, {0x26, 1, {0x00} }, {0x27, 1, {0x00} }, {0x28, 1, {0x55} }, {0x29, 1, {0x03} }, {0x2a, 1, {0x00} }, {0x2b, 1, {0x00} }, {0x2c, 1, {0x00} }, {0x2d, 1, {0x00} }, {0x2e, 1, {0x00} }, {0x2f, 1, {0x00} }, {0x30, 1, {0x00} }, {0x31, 1, {0x00} }, {0x32, 1, {0x00} }, {0x33, 1, {0x00} }, {0x34, 1, {0x00} }, {0x35, 1, {0x00} }, {0x36, 1, {0x00} }, {0x37, 1, {0x00} }, {0x38, 1, {0x3C} }, {0x39, 1, {0x00} }, {0x3a, 1, {0x00} }, {0x3b, 1, {0x00} }, {0x3c, 1, {0x00} }, {0x3d, 1, {0x00} }, {0x3e, 1, {0x00} }, {0x3f, 1, {0x00} }, {0x40, 1, {0x00} }, {0x41, 1, {0x00} }, {0x42, 1, {0x00} }, {0x43, 1, {0x00} }, {0x44, 1, {0x00} }, {0x50, 1, {0x01} }, {0x51, 1, {0x23} }, {0x52, 1, {0x45} }, {0x53, 1, {0x67} }, {0x54, 1, {0x89} }, {0x55, 1, {0xab} }, {0x56, 1, {0x01} }, {0x57, 1, {0x23} }, {0x58, 1, {0x45} }, {0x59, 1, {0x67} }, {0x5a, 1, {0x89} }, {0x5b, 1, {0xab} }, {0x5c, 1, {0xcd} }, {0x5d, 1, {0xef} }, {0x5e, 1, {0x01} }, {0x5f, 1, {0x08} }, {0x60, 1, {0x02} }, {0x61, 1, {0x02} }, {0x62, 1, {0x0A} }, {0x63, 1, {0x15} }, {0x64, 1, {0x14} }, {0x65, 1, {0x02} }, {0x66, 1, {0x11} }, {0x67, 1, {0x10} }, {0x68, 1, {0x02} }, {0x69, 1, {0x0F} }, {0x6a, 1, {0x0E} }, {0x6b, 1, {0x02} }, {0x6c, 1, {0x0D} }, {0x6d, 1, {0x0C} }, {0x6e, 1, {0x06} }, {0x6f, 1, {0x02} }, {0x70, 1, {0x02} }, {0x71, 1, {0x02} }, {0x72, 1, {0x02} }, {0x73, 1, {0x02} }, {0x74, 1, {0x02} }, {0x75, 1, {0x06} }, {0x76, 1, {0x02} }, {0x77, 1, {0x02} }, {0x78, 1, {0x0A} }, {0x79, 1, {0x15} }, {0x7a, 1, {0x14} }, {0x7b, 1, {0x02} }, {0x7c, 1, {0x10} }, {0x7d, 1, {0x11} }, {0x7e, 1, {0x02} }, {0x7f, 1, {0x0C} }, {0x80, 1, {0x0D} }, {0x81, 1, {0x02} }, {0x82, 1, {0x0E} }, {0x83, 1, {0x0F} }, {0x84, 1, {0x08} }, {0x85, 1, {0x02} }, {0x86, 1, {0x02} }, {0x87, 1, {0x02} }, {0x88, 1, {0x02} }, {0x89, 1, {0x02} }, {0x8A, 1, {0x02} }, {0xFF, 3, {0x98, 0x81, 0x04} }, // {0x2D, 1, {0xFF} }, //BIST // {0x2F, 1, {0x01} }, //BIST {0x6C, 1, {0x15} }, {0x6E, 1, {0x30} }, {0x6F, 1, {0x37} }, //3VSP 3VSN {0x8D, 1, {0x1F} }, {0x87, 1, {0xBA} }, {0x26, 1, {0x76} }, {0xB2, 1, {0xD1} }, {0xB5, 1, {0x07} }, {0x35, 1, {0x17} }, {0x33, 1, {0x14} }, {0x31, 1, {0x75} }, {0x3A, 1, {0x85} }, {0x3B, 1, {0x98} }, {0x38, 1, {0x01} }, {0x39, 1, {0x00} }, {0x7A, 1, {0x10} }, {0xFF, 3, {0x98, 0x81, 0x01} }, {0x22, 1, {0x0A} }, {0x31, 1, {0x00} }, {0x50, 1, {0xCF} }, //5.2V {0x51, 1, {0xCA} }, //-5.2V {0x53, 1, {0x45} }, //45 41 {0x55, 1, {0x48} }, {0x60, 1, {0x28} }, {0x2E, 1, {0xC8} }, {0x34, 1, {0x01} }, //{0x56, 1, {0x00} }, {0xA0, 1, {0x00} }, //VP255 Gamma P {0xA1, 1, {0x08} }, //VP251 {0xA2, 1, {0x18} }, //VP247 {0xA3, 1, {0x15} }, //VP243 {0xA4, 1, {0x19} }, //VP239 {0xA5, 1, {0x2D} }, //VP231 {0xA6, 1, {0x21} }, //VP219 {0xA7, 1, {0x23} }, //VP203 {0xA8, 1, {0x74} }, //VP175 {0xA9, 1, {0x1C} }, //VP144 {0xAA, 1, {0x26} }, //VP111 {0xAB, 1, {0x64} }, //VP80 {0xAC, 1, {0x1A} }, //VP52 {0xAD, 1, {0x1C} }, //VP36 {0xAE, 1, {0x50} }, //VP24 {0xAF, 1, {0x25} }, //VP16 {0xB0, 1, {0x2A} }, //VP12 {0xB1, 1, {0x4C} }, //VP8 {0xB2, 1, {0x5D} }, //VP4 {0xB3, 1, {0x23} }, //VP0 {0xC0, 1, {0x00} }, //VN255 GAMMA N {0xC1, 1, {0x1B} }, //VN251 {0xC2, 1, {0x27} }, //VN247 {0xC3, 1, {0x13} }, //VN243 {0xC4, 1, {0x16} }, //VN239 {0xC5, 1, {0x28} }, //VN231 {0xC6, 1, {0x1E} }, //VN219 {0xC7, 1, {0x20} }, //VN203 {0xC8, 1, {0x7D} }, //VN175 {0xC9, 1, {0x19} }, //VN144 {0xCA, 1, {0x27} }, //VN111 {0xCB, 1, {0x65} }, //VN80 {0xCC, 1, {0x1D} }, //VN52 {0xCD, 1, {0x1D} }, //VN36 {0xCE, 1, {0x52} }, //VN24 {0xCF, 1, {0x26} }, //VN16 {0xD0, 1, {0x2C} }, //VN12 {0xD1, 1, {0x4E} }, //VN8 {0xD2, 1, {0x59} }, //VN4 {0xD3, 1, {0x23} }, //VN0 //{0xFF, 3, {0x98, 0x81, 0x04} }, //{0x2F, 1, {0x01} }, {0xFF, 3, {0x98, 0x81, 0x00} }, {0x35, 1, {0x00} }, {0x11, 0, {}}, {REGFLAG_DELAY, REGFLAG_DELAY, {120}}, {0x29, 0, {}}, {REGFLAG_DELAY, REGFLAG_DELAY, {20}}, {REGFLAG_END_OF_TABLE, REGFLAG_END_OF_TABLE, {}} }; static void lcd_panel_init(u32 sel) { __u32 i; sunxi_lcd_dsi_clk_enable(sel); sunxi_lcd_delay_ms(20); for (i = 0;; i++) { if (lcm_tft08006_setting[i].count == REGFLAG_END_OF_TABLE) break; else if (lcm_tft08006_setting[i].count == REGFLAG_DELAY) { sunxi_lcd_delay_ms(lcm_tft08006_setting[i].para_list[0]); } else { dsi_gen_wr(sel, lcm_tft08006_setting[i].cmd, lcm_tft08006_setting[i].para_list, lcm_tft08006_setting[i].count); } /* break; */ } } static void lcd_panel_exit(u32 sel) { sunxi_lcd_dsi_dcs_write_0para(sel, 0x10); sunxi_lcd_delay_ms(80); sunxi_lcd_dsi_dcs_write_0para(sel, 0x28); sunxi_lcd_delay_ms(50); } /*sel: 0:lcd0; 1:lcd1*/ static s32 lcd_user_defined_func(u32 sel, u32 para1, u32 para2, u32 para3) { return 0; } struct __lcd_panel tft08006_panel = { /* panel driver name, must mach the name of * lcd_drv_name in sys_config.fex */ .name = "tft08006", .func = { .cfg_panel_info = lcd_cfg_panel_info, .cfg_open_flow = lcd_open_flow, .cfg_close_flow = lcd_close_flow, .lcd_user_defined_func = lcd_user_defined_func, }, };
-
悬赏令:横向支持更多板子, 纵向提供更多项目 DongshanPI-D1s教程征集活动!
1. 不能学以致用?
百问网从2011年使用S3C2440录制Linux视频,在2019年使用IMX6ULL等开发板重新录制视频。
在我们10多年的培训生涯里,发现很多人学习时用A板,在工作中换了B板,他就不知道怎么做了。
APP层面:它本应该支持所有Linux板子,实际使用时不是缺驱动就是缺库
组件:它本应该支持有所板子,但是很可能因为缺乏某些依赖无法运行
内核:内核里对于某款CPU核(比如crotex A7)已经支持得很完美了,你需要指定内存地址等等
驱动:有了GPIO子系统、pinctrl子系统,针对板子修改一下设备树就可以
我们完全可以编写一个APP、一个组件、一个驱动程序,使用同一套代码,在所有的板子上运行。我们的课程,已经实现了这一点,它可以支持D1H、T113等等开发板。
对于快速入门,我们已经发布了这些视频,除了第3篇稍有不同外,其他都是一样的:
image
image新发布的开发板教程在:第3篇:环境搭建与开发板操作
2. 会抄就行!
很多人觉得嵌入式Linux很难,APP开发难、驱动开发难、不会做项目!
有些同学不想学习那么多的理论,
那么,你会抄代码不?会抄就行!
做毕业时,抄!修修改改就可以!
工作时,抄!修修改改就可以!
我们会从上到下扩展很多案例,让你学习、工作时,可以直接拿来修改使用!
3. 悬赏活动
3.1 D1S开发板配套项目
百问网正在设计全志D1S开发板:
- RISCV架构
- 所有信号都引出
- 板载CKLink调试器,无缝使用平头哥工具
- 支持OTG烧写
- 左右两侧排针兼容树莓派信号
- 支持YoC系统
- 支持RT-Thread等RTOS
- 支持Tina-Linux
- 支持社区Linux
板子还有2周才出来,现在征集教程:
- 擅长做底层系统的:可以在我们的板子上移植新的操作系统,可以是FreeRTOS、RT-Tthread、YoC等
- 擅长做组件的:制作一个组件库/包,如MQTT 库等
- 擅长做应用的:开发一个应用,比如传感器的一个混合应用
感兴趣的同学先加群一起讨论,等板子出来再宣布奖励方法。
-
回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?
@yteraa 感谢大佬的指点,已经可以,原来我已经找到了实现的代码,就是没有设置环境变量
。
我现在使用buildroot定义
ENV环境变量里进行了配置
保存后 重启,就可以看到它自动加载了看来以后还是要大胆去尝试
-
回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?
Tina-u-boot-2018\board\sunxi\sunxi_replace_fdt.c
uboot配置支持 CONFIG_SUNXI_REPLACE_FDT_FROM_PARTITION 选项,编译烧写,重新启动
提示如下错误
这里应该是加载到了设备树,但是启动时 无法启动
-
翻车了,蓝色D1-H 东山哪吒STU最小板,只能玩,不能用来连接扩展板,这可如何是好?
这次批量回来了 蓝色D1-H 东山哪吒STU ,科技感要比红色主板高很多,无奈因为 做PCB时 粗心大意 选错了 PCB的板厚,导致无法连接扩展底板,只能忍痛重新生产!
有那位同学知道 支持SODIMM 1.6PCB厚度的连接器,欢迎沟通交流。
另外这个板子,因为做了500pcs,只能倒贴处理掉了,
不加flash的 主板 售价 66 邮费7元。
加256 旺宏 flash售价99,包邮(需联系客服改价)。 -
回复: 【送开发板啦】百问科技基于全志D1-H定制的开发板——东山哪吒STU第一堂系统开发直播课堂
@idaniel 我们的开发板硬件兼容了公板设计,所以 哪吒开发板 支持的 debian镜像 都可以直接在我们的开发板上 使用。
-
LVGL+NES模拟器
最近我有一个想法,既然LVGL能担任显示和外部输入(触摸和按键)的工作,为什么不用LVGL来写一个游戏模拟器呢?
这是我的试验成果,只是简单的效果还没有进行更多的优化,接下来我会继续添加更多的功能,大家觉得好玩吗?
-
回复: 请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?
问题已经解决,原因是 kernel 板级设备树 board.dts 要在父级设备树 根节点下 aliases 增加 节点 gmac0 = &gmac0;
其中uboot下要做几个配置。
有了这些以后 启动uboot进入终端内 就可以使用网卡设备了,具体可以分析
Tina-u-boot-2018\drivers\net\sunxi_geth.c
文件。这个时候我们就可以接上网线 使用 网络方式 更新 内核 设备树了,大大缩短 拔 卡插卡 烧写系统 繁琐的时间浪费。
设置一下
网卡MAC地址 setenv ethaddr AA:BB:CC:DD:EE:FF
开发板的IP地址 setenv ipaddr 192.168.1.36
你的服务器的IP地址 setenv serverip 192.168.1.133
以及启动的bootargs setenv bootargs earlycon=${earlycon} clk_ignore_unused initcall_debug=${initcall_debug} console=${console} loglevel=${loglevel} root=${mmc_root} init=${init} partitions=${partitions} cma=${cma} snum=${snum} mac_addr=${mac} wifi_mac=${wifi_mac} bt_mac=${bt_mac} specialstr=${specialstr} gpt=1
设置完成以后,把我们单独编译出来的 boot_package.fex 文件 boot.img 放到我们Ubuntu主机上的tftp目录下。
我的服务器是 192.168.1.133tftp 43000000 192.168.1.133:boot_package.fex
下载完成后 执行如下命令 进行烧写。
sunxi_card0_probe;mmcinfo;mmc part
mmc write 43000000 0x00008020 0x1800
注意:我这里烧写的是TF卡。
烧写完成后 重启,你会发现 用的就是最新的 设备树了。
这里有个问题,就是 原厂将 uboot optee 板级board.dtb 打包进了一个文件,所以无法单独烧写board.dtb ,只能一次烧所有。这里 给大家提供另一种 思路,就是使用 DTBO 来通过 uboot的 fdt overlay方式 单独去加载你修改的设备,然后应用。
更新完了 板级 board.dtb以后,就可以通过tftp获取 你的 内核文件,然后 网络启动了。
tftp 45000000 192.168.1.133:boot.img;bootm 45000000
只需要一条命令,获取到 boot.img内核镜像文件,然后启动即可。
启动信息如下
那么到这里 我们就可以很方便开发你的设备驱动 调试了。
当然你也可以用 nfs_rootfs网络根文件系统,这个 步骤网上很多文章 我就不再截图了。
在使用tftp的时候 发现了一个很烦人的 log信息。
CACHE: Misaligned operation at range [47fea2c0, 47fea2ee]
发现在 Tina-u-boot-2018\arch\arm\lib\cache.c
里面,我目前的做法是将其 注释掉,
但是个人感觉 这种做法不标准,应该有宏开关 去控制的。希望知道的同学告知一下。
-
回复: 有D1S/F133连接以太网的参考吗
可以参考我们的 100ask_D1s_PRO开发板 底板原理图,功能已经调通。
100ASK_T113-Pro_Base-SCH.pdf
-
回复: 分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。
@allwinnertech 知道了这些以后,后面就可以 直接抛开 任何的 自动构建系统,来从零自己撸Linux系统了。前面已经告诉了 大家怎么 兼容buildroot 编译各个部分。。
-
分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。
- 镜像文件 tina_d1-h-nezha_uart0.img 欢迎烧写体验。
步骤简述
首先记录下官方 tina-sdk 打包的log输出。
book@virtual-machine:~/D1s-Core/tina-d1-h$ pack --==========-- PACK_CHIP sun20iw1p1 PACK_PLATFORM tina PACK_BOARD d1-h-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/book/D1s-Core/tina-d1-h --==========-- No kernel param, parse it from d1-h copying tools file copying configs file storage_type value is 5 rm /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition_nor.fex rm /home/book/D1s-Core/tina-d1-h/out/d1-h-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/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex handle partition user-res no user resource partitions APP_PART_DOWNLOAD_FILE = /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/app.fex Need size of filesystem no data resource partitions don't build dtbo ... create sys_partiton.fex +++++++++++++++++++++++++++++++++++++++++++++++++++++4 argc = 2 input name sys_partition.fex Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin update_fdt: num 1752 randto1k parser 1 file ok create sys_partiton.fex+++++++++++++++++++++++++++++++++++++++++++++++++++++5 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 update mbr use 4++++++++++++++++++++++ mbr count = 4 partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex mbr size = 252 mbr magic softw411 disk name=boot-resource disk name=env disk name=env-redund disk name=boot disk name=rootfs disk name=dsp0 disk name=recovery this is not a partition key update_for_part_info 0 crc 0 = 4c7bc2df crc 1 = d9c69382 crc 2 = bc706624 crc 3 = 29cd3779 gpt_head->header_crc32 = 0x892c53ba GPT----part num 8--- gpt_entry: 128 gpt_header: 92 GPT:boot-resource: a1f8 c177 GPT:env : c178 c36f GPT:env-redund : c370 c567 GPT:boot : c568 1161f GPT:rootfs : 11620 1b597 GPT:dsp0 : 1b598 1b987 GPT:recovery : 1b988 227c7 GPT:UDISK : 227c8 ffffffde update gpt file ok update mbr file ok temp = 20 mbr count = 4 total_sectors = 15269888 logic_offset = 40960 partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex mbr size = 252 mbr magic softw411 disk name=boot-resource disk name=env disk name=env-redund disk name=boot disk name=rootfs disk name=dsp0 disk name=recovery this is not a partition key update_for_part_info 0 crc 0 = 4c7bc2df crc 1 = d9c69382 crc 2 = bc706624 crc 3 = 29cd3779 gpt_head->header_crc32 = 0x1328fa28 GPT----part num 8--- gpt_entry: 128 gpt_header: 92 GPT:boot-resource: a1f8 c177 GPT:env : c178 c36f GPT:env-redund : c370 c567 GPT:boot : c568 1161f GPT:rootfs : 11620 1b597 GPT:dsp0 : 1b598 1b987 GPT:recovery : 1b988 227c7 GPT:UDISK : 227c8 e8ffde update gpt file ok update mbr file ok cp sys parttion.fex for dragon.fex ++++++++++++++++++++++++++++ ==================================== 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/book/D1s-Core/tina-d1-h/out/d1-h-nezha/boot.img boot.img size : 5.0M byte ------------------------------------ partition_name : rootfs partition_size : 40824 downloadfile : rootfs.fex rootfs.fex -> /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/rootfs.img rootfs.img size : 5.9M byte ------------------------------------ partition_name : dsp0 partition_size : 1008 downloadfile : dsp0.fex dsp0.fex size : 249K byte ------------------------------------ partition_name : recovery partition_size : 28224 ------------------------------------ /home/book/D1s-Core/tina-d1-h/out/host/bin/ /home/book/D1s-Core/tina-d1-h/out/d1-h-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=4f4000Add partion rootfs.fex ROOTFS_FEX000000 Add partion very rootfs.fex ROOTFS_FEX000000 FilePath: rootfs.fex FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000 Add partion very dsp0.fex DSP0_FEX00000000 FilePath: dsp0.fex FileLength=3e38cBuildImg 0 Dragon execute image.cfg SUCCESS ! ----------image is for nand/emmc---------- ----------image is at---------- /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/tina_d1-h-nezha_uart0.img pack finish
分析打包过程
从上述log可以看出整个打包过程大致分为这么几个步骤
- 指定一些比较环境变量,比如镜像输出目录 镜像的一些配置信息。
- 之后将镜像拷贝到需要打包的目录下,开始进行统一处理
- 根据文件系统分区信息,将其转换成 适合后续程序使用的格式。
- 转换分区信息为 专门的GPT/MBR分区头部。
- 使用dragon打包,将所有配置文件里指定的文件,进行汇总,打包输出。
使用命令操作 主要分为4步
busybox unix2dos sys_partition.fex tina-d1-h/tools/pack-bintools/src/script sys_partition.fex tina-d1-h/tools/pack-bintools/src/update_mbr sys_partition.bin 4 tina-d1-h/tools/pack-bintools/src/dragon image.cfg sys_partition.fex
dragon分析
这里面 最关键的就是 sys_partition.fex 文件,它定义了分区的信息 以及大小等。
可以进入 编译后的 tina-d1-h/out/d1-h-nezha/image 目录下查看。
我们可以直接cat sys_partition.fex文件book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ cat sys_partition_for_dragon.fex ;--------------------------------------------------------------------------------------------------- ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串 ;--------------------------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------------- ; 固件下载参数配置 ;--------------------------------------------------------------------------------------------------- ;*************************************************************************************************** ; mbr的大小, 以Kbyte为单位 ;*************************************************************************************************** [mbr] size = 252 ;*************************************************************************************************** ; 分区配置 ; ; ; partition 定义范例: ; [partition] ; //表示是一个分区 ; name = USERFS2 ; //分区名称 ; size = 16384 ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T ; downloadfile = "123.fex" ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径 ; keydata = 1 ; //私有数据分区,重新量产数据将不丢失 ; encrypt = 1 ; //采用加密方式烧录,将提供数据加密,但损失烧录速度 ; user_type = ? ; //私有用法 ; verify = 1 ; //要求量产完成后校验是否正确 ; ; 注:1、name唯一, 不允许同名 ; 2、name最大12个字符 ; 3、size = 0, 将创建一个无大小的空分区 ; 4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size) ;*************************************************************************************************** [partition_start] [partition] name = boot-resource size = 8064 downloadfile = "boot-resource.fex" user_type = 0x8000 [partition] name = env size = 504 downloadfile = "env.fex" user_type = 0x8000 [partition] name = env-redund size = 504 downloadfile = "env.fex" user_type = 0x8000 [partition] name = boot size = 20664 downloadfile = "boot.fex" user_type = 0x8000 [partition] name = rootfs size = 40824 downloadfile = "rootfs.fex" user_type = 0x8000 [partition] name = dsp0 size = 1008 downloadfile = "dsp0.fex" user_type = 0x8000 [partition] name = recovery size = 28224 ;downloadfile = "recovery.fex" user_type = 0x8000
这里面所有的 downloadfile文件 都是我们编译出来要烧写的文件。所以只需要把相应的文件放到这个目录下,就可以进行打包操作了。
如果你在不改变 文件大小的前提下,可以直接执行tina-d1-h/tools/pack-bintools/src/dragon image.cfg sys_partition.fex
命令,你会发现它生成了一个 tina_d1-h-nezha_uart0.img,镜像,这个镜像是和使用pack命令打包生成的一样。那么这里面还有一个 img.cfg文件。这个文件里面包含了很多 fex二进制文件,目前我认为这些文件都是和全志官方的烧写工具绑定死的,所以不用管它,只要制作的时候 当前目录下有这些工具即可。
有了这两个文件以后,就可以直接使用 dragon打包生成可以用 凤凰烧写器 烧写的系统镜像啦。
sys_partiton分析
如果你的系统镜像格式 一直保持大小不变,那么上面这个命令 就可以一直用,但是这个时候 我想自己编译内核 增加 驱动模块,编译文件系统 增加组件 导致系统镜像变大了 这要怎么办?
简单点,直接修改 sys_partition.fex为 文件大小不就可以了吗?
但是你会发现 这样做不行,他会提示错误。
这个时候 我们就要继续分析 log日志输出了,会发现,我们执行 dragon打包 只有下面这些输出信息,没有上面的 GPT/MBR分区信息。/home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/ /home/book/D1s-Core/tina-d1-h/out/d1-h-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=4f4000Add partion rootfs.fex ROOTFS_FEX000000 Add partion very rootfs.fex ROOTFS_FEX000000 FilePath: rootfs.fex FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000 Add partion very dsp0.fex DSP0_FEX00000000 FilePath: dsp0.fex FileLength=3e38cBuildImg 0 Dragon execute image.cfg SUCCESS !
那么这个时候 就需要往回找,这个文件是哪里来的 怎么生成的?
通过 搜索 分析 发现是 来自于 sys_partiton.bin 文件,但是这个文件又是一个 二进制文件,而且也是后面打包生成的,那么还是要继续往回找 sys_partition.bin文件又是怎么生成的。同样是结合log 加打印
找到了 如下这两个命令。
busybox unix2dos sys_partition.fex
script sys_partition.fex一开始以为这个 script 是ubuntu的某一个包,后来发现也是一个全志自家提供的工具。
既然 工具都找全了 那我们可以修改试试看。修改 sys_partition.fex 把它的大小 调整为 70824
之后保存退出,从头执行如下命令 来确认猜想是否正确。book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ busybox unix2dos sys_partition.fex book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/script sys_partition.fex argc = 2 input name sys_partition.fex Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin update_fdt: num 1752 randto1k parser 1 file ok book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/update_mbr sys_partition.bin 4 mbr count = 4 partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex mbr size = 252 mbr magic softw411 disk name=boot-resource disk name=env disk name=env-redund disk name=boot disk name=rootfs disk name=dsp0 disk name=recovery this is not a partition key update_for_part_info 0 crc 0 = ea84dacc crc 1 = 7f398b91 crc 2 = 1a8f7e37 crc 3 = 8f322f6a gpt_head->header_crc32 = 0x53fc3a66 GPT----part num 8--- gpt_entry: 128 gpt_header: 92 GPT:boot-resource: a1f8 c177 GPT:env : c178 c36f GPT:env-redund : c370 c567 GPT:boot : c568 1161f GPT:rootfs : 11620 22ac7 GPT:dsp0 : 22ac8 22eb7 GPT:recovery : 22eb8 29cf7 GPT:UDISK : 29cf8 ffffffde update gpt file ok update mbr file ok book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/dragon image.cfg sys_partition.fex /home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/ /home/book/D1s-Core/tina-d1-h/out/d1-h-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=4f4000Add partion rootfs.fex ROOTFS_FEX000000 Add partion very rootfs.fex ROOTFS_FEX000000 FilePath: rootfs.fex FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000 Add partion very dsp0.fex DSP0_FEX00000000 FilePath: dsp0.fex FileLength=3e38cBuildImg 0 Dragon execute image.cfg SUCCESS ! book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$
最后在当前目录下 生成了一个 名为 tina_d1-h-nezha_uart0.img 文件,把它用 凤凰烧录 工具烧录进去。
你会发现你可以把你增加过文件的分区 烧进去 并启动啦。那么这个时候,还存在一个问题,就是D1使用的都是 squashfs 类型的文件系统,这个时候,你也需要分析一下 他们的这个文件系统 生产方式,这个就可以借助 grep 命令了,参考如下。
分析文件系统生成方式
最后得到 这个
rootfs.squashfs -noappend -processors 9 -nopad -noappend -root-owned -comp xz -b 256k -p '''/dev d 755 0 0''' -p '''/dev/console c 600 0 0 5 1''' -processors 4\n' >> /home/book/buildroot_dshannezhastu/buildroot-awol/output/build/buildroot-fs/squashfs/fakeroot然后 把它 扔进 buildroot 就可以制作出 可以供 D1内核使用的系统,
注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。
注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。
注意 tina的环境变量里面的 init 进程位置和buildroot 不一样 需要修改。最后 给大家放上,我们已经支持过 NEZHA D1的buildroot完整系统镜像源码
https://github.com/DongshanPI/buildroot_dshannezhastuclone下来后,需要更新git 子模块 执行如下命令来拉取子模块的源码。
git submodule update --init --recursive
git submodule update --recursive --remote
git pull --recurse-submodules之后进入 buildroot-awol 目录下,稍等一会 就可以生成 供spi nand 烧写的flash镜像了。 当然,也可以烧到tf卡启动。。
buildroot_dshannezhastu/buildroot-awol$ make BR2_DL_DIR=../Download BR2_EXTERNAL=../br2nezhastu/ dshannezhastu_spinand_core_defconfig编译完成后的输出信息。
镜像输出在 output/images/目录下
-
回复: 真离谱:使用主线Buildroot编译Tina Linux系统,然后使用全志官方PhoenixSuit烧写SPI NAND
@yuzukitsuru 如何才能做到 使用Tina Linux,在不大改源码的情况下,使用dfu进行全部的烧写操作? 有没有参考的?
-
真离谱:使用主线Buildroot编译Tina Linux系统,然后使用全志官方PhoenixSuit烧写SPI NAND
这么做的用意到底何在?
难不成 只是为了让大家更容易上手?