导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. baiwen
    3. 帖子
    • 资料
    • 关注 3
    • 粉丝 25
    • 我的积分 4383
    • 主题 66
    • 帖子 136
    • 最佳 52
    • 群组 1

    baiwen 发布的帖子

    • Avaota F1 Ultra light Linux SBC, with Wi-Fi built-in, Dual RISC-V Core AMP within ultra light shape

      微信图片_20250116113725.jpg
      49a03c55-1888-4471-bf11-45039398d243-微信图片_20250116113713.jpg 微信图片_20250116113706.png

      发布在 V Series
      baiwen
      100ask
    • R818 DshanPI-ROSx 高清靓图来啦! WiFi6 + 千兆网卡 + 800万 MIPI 摄像头 + MIPI HDMI显示 + OTG USB 串口 + 电池BAT!

      76399dd2-a17a-4554-9bc7-fe02dc0c304d-未标题-1_09.jpg
      45a197fe-b757-47d4-82c4-d86dbec1a12e-未标题-1_07.jpg

      发布在 MR Series
      baiwen
      100ask
    • 韦东山 全志T113s3 PRO V1.3来啦!

      完全兼容V1.2版本软硬件+文档 视频教程,另外在此基础上,新增了 RS485 CAN2.0 TVIN 输入 TVOUT输出等接口,同时我们提供了 SD-NAND 4GB 大容量类EMMC版本 + WIFI6 + BT5无线 模块支持!
      T113-PRO_03.jpg
      T113-PRO_04.jpg
      T113-PRO_05.jpg
      T113-PRO_06.jpg

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 全志T113 运行 谷歌 Flutter UI 示例,请问有没有哪位大佬了解怎么移植适配最新 Flutter 版本呢?

      ad7b6afe-a9da-4a7a-8dfe-31774e786a55-dccf71682fe1c2061c46daab0ffb7b9.jpg
      80b35408-babf-420d-be5d-df736a5fac7e-f30889f8bd30c55a2a537d859bc4bcf.jpg
      bd535d94-512c-4278-a41a-e23c2af2c6f7-image.png
      d254b762-a3cc-43c9-a6cc-b80d1608c494-image.png

      发布在 GUI
      baiwen
      100ask
    • 回复: t113(tina)加入paha.mqtt.c库,编译成固件烧录到板子上后报错找不到动态库

      我也遇到了编译QT5 无法打包所有qt so库的情况。
      经过调试发现
      是最后打包制作 rootfs.img 时 自动将 脚本认为无用的 文件资源 库 给移除掉了。所以导致最终目标系统没有包含进去。


      源码 build 目录 找到 reduce-rootfs-size.sh 脚本
      找到 downsize_rootfs 函数,注释掉里面的几个 remove函数

      6aad5b64-c79f-446e-988f-fac675fc2eee-image.png

      具体打包无效原因在。
      a552a01c-dff8-4cc1-80b5-d08e7e119784-image.png

      a2ee0e16-cfc0-4460-a51b-2ce0a98069fa-image.png

      发布在 MR Series
      baiwen
      100ask
    • AvaotaSBC 系列 A1 自带SPI显示屏 T527 开源版来啦!!!

      AvaotaA1_01.jpg
      详情_11.jpg
      详情_10.jpg
      详情_09.jpg
      详情_08.jpg
      详情_07.jpg
      详情_06.jpg
      详情_05.jpg
      详情_04.jpg
      详情_03.jpg
      详情_02.jpg
      详情_01.jpg
      详情_13.jpg
      详情_12.jpg

      发布在 T Series
      baiwen
      100ask
    • T113i-DevKit开发板审美开始变的花花绿绿起来了!

      3229a045-99b5-4fc9-ad56-70537076061e-image.png
      44fa59e3-db6b-493b-84c5-5f4ebf33a79c-image.png
      30944883-86b9-4ea5-bba7-724deaf4a725-image.png

      发布在 Linux
      baiwen
      100ask
    • 请问如何在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可以正常播放视频。

      db0b4ae5-5dd1-47cf-a8a9-f251ea3fa173-6042142a32cd7b6b063ecc28ebf0d80.jpg

      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 输出,有没有比较了解的大佬指点一二?
      不胜感激!

      发布在 MR Series
      baiwen
      100ask
    • T527 AvaotaPI-A1 高清靓照来了!!!

      0b119481-eeb2-4e6a-91c7-a0e8c4022df1-image.png
      0676d954-4087-4f9b-8077-61d4cd2db6be-image.png
      5bd97c5d-41ea-4c9a-bc11-2d1cf3b1cc7e-image.png
      a2ad7c1b-0a74-414e-a215-f71aede163f6-image.png
      e6389f20-fbcc-4388-ae64-df4781f4342c-image.png

      发布在 T Series
      baiwen
      100ask
    • 有哪位小伙伴知道 《Tina System init使用说明文档》 是哪里获取的么?

      2e5ec5f2-f253-408f-a461-63d93ffef5e8-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: tina make的时候报错,请问怎么解决

      @proc_c

      执行这三条命令之后再make看看,应该能解决问题:

      rm -rf out
      rm .config
      make distclean
      

      之后执行 make 编译。

      发布在 编译和烧写问题专区
      baiwen
      100ask
    • 回复: 求教使用百问网v851s的sdk打包问题!

      @awwwwa
      可以参考 编译步骤
      https://dongshanpi.com/YuzukiHD-Lizard/07-TinaSDK_DevelopmentGuide/
      重新 拉取 SDK Lizard 扩展补丁包
      覆盖
      f4b87d1e-0c6f-40a3-95e2-c2b911bface0-image.png

      发布在 V Series
      baiwen
      100ask
    • 回复: V851S上的ISP真的坏了吗?

      @kanken6174 谢谢您的理解!

      发布在 V Series
      baiwen
      100ask
    • 回复: V851S上的ISP真的坏了吗?

      @kanken6174 好的,发送邮件后,可以通知我,我将给你处理 SDK问题

      发布在 V Series
      baiwen
      100ask
    • 回复: V851S上的ISP真的坏了吗?

      @kanken6174 非常抱歉,给您带来了 不好的体验, V851S商品没有下架,平台最近对认证有着非常严格的要求,导致我们的商品无法在 欧盟地区 售卖。
      37d46937-2780-42fe-8f3c-11db02fde5f1-image.png
      有相关问题,可以 发 邮件到 support@100ask.net
      我们会单独处理。
      484085b5-c426-4c09-8491-c754e5c828b2-image.png

      发布在 V Series
      baiwen
      100ask
    • 基于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)

      • GitHub: https://github.com/100askTeam/LCOM
      • Gitee:https://gitee.com/weidongshan/LCOM

      Issues

      https://github.com/100askTeam/LCOM/issues

      发布在 GUI
      baiwen
      100ask
    • 回复: V851SE TinyVision地表最帅AI开发板来了! @yuzukihd

      @baiwen 使用tina-sdk 4.0 启动 提示 ERROR: reserving fdt memory region failed (addr=41f12000 size=384000)
      493ddf63-0376-48e6-9c89-99df48cd3797-image.png
      有问题固件
      tina_v851se-tinyvision_uart0_kernel-error.zip

      sd线刷
      330db410-2984-48f5-8b60-ad3b94fe6689-sd-tina_v851se-tinyvision_uart0.zip

      env.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
      
      

      u-boot-2018.tar.gz

      发布在 V Series
      baiwen
      100ask
    • V851SE TinyVision地表最帅AI开发板来了! @yuzukihd

      74a00aef-0701-43da-9bd2-d849ef85169b-F_MFmsVbEAAHHys.jpg
      F_rIkkQaUAESNzD.jpg
      F_rIkjfa8AAmKfQ.jpg

      d4fad1c9-dabf-4bd3-be53-528765985121-副图.png

      发布在 V Series
      baiwen
      100ask
    • R128+LVGL+不同尺寸RGB屏运行效果

      演示视频观看:https://www.bilibili.com/video/BV1Pa4y1o7sF

      f5d1134d-941b-4018-bd2c-b91b5fc5b5eb-image.png

      发布在 A Series
      baiwen
      100ask
    • 回复: LVGL 与 SPI TFT GUI案例报错

      @zy614 视频教程:https://www.bilibili.com/video/BV1oC4y1w7AH?p=20

      发布在 A Series
      baiwen
      100ask
    • 回复: R128_RGB开发板,7寸屏LVGL例程问题

      @abcdef 视频教程: https://www.bilibili.com/video/BV1oC4y1w7AH?p=21

      发布在 A Series
      baiwen
      100ask
    • 回复: R128适配SPI LCD+LVGL

      @wj8331585 下周应该就有了,今天刚好录制了5节:https://www.bilibili.com/video/BV1oC4y1w7AH

      发布在 A Series
      baiwen
      100ask
    • R128入门视频教程来啦!

      视频观看地址:https://www.bilibili.com/video/BV1oC4y1w7AH

      获取全志R128开发板:https://item.taobao.com/item.htm?id=736154682975
      学习QQ群:318160957

      发布在 A Series
      baiwen
      100ask
    • 在Linux下快捷对R128进行烧录

      给Linux版的PhoneixSuit封了一层,这样烧写就便捷多了

      准备烧写:
      4e39dcb7-f526-44dd-ac79-3de8c822dae7-image.png

      烧写结束:
      4a4593ee-f534-4a77-8936-261eb0391d95-f38b6d062f9c5f52167deb9227da4c7.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      @wj8331585 在 【R128学习案例】R128平衡小车 中说:

      我这咋什么都没显示出来。

      那应该是你的网络问题,我用手机也能预览,如果一直无法查看视频,可以去b站观看:https://www.bilibili.com/video/BV1Fg4y197Vh

      发布在 A Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月19日更新】遥控手柄UI (LVGL) 第一个版本 (joystick 100ask v0.1):

      发布在 A Series
      baiwen
      100ask
    • 回复: 2.4 spi lcd点不亮

      @wj8331585

      参考:https://bbs.aw-ol.com/topic/3758/share/4

      发布在 A Series
      baiwen
      100ask
    • 回复: R128适配SPI LCD+LVGL

      这是我的一些笔记:

      所使用的补丁:spilcd2.0.zip

      ![ecd799ae-c9d0-46f1-8314-65f191526151-image.png](/assets/uploads/files/1700016539588-ecd799ae-c9d0-46f1-8314-65f191526151-image.png) 修改默认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>
      
      
      发布在 A Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月15日更新】实现网络通信控制(UDP):

      [Video]

      发布在 A Series
      baiwen
      100ask
    • 回复: 【R128学习案例】R128平衡小车

      【2023年11月8日更新】自平衡功能已实现,运行效果:

      发布在 A Series
      baiwen
      100ask
    • 【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硬件(淘宝购买链接):

      • https://item.taobao.com/item.htm?id=736154682975

      文档教程阅读地址:

      • https://aw-r128.100ask.net

      功能特性:

      自平衡功能

      WiFI控制功能(微信小程序或手机APP)

      蓝牙控制功能(微信小程序或手机APP)

      语音控制功能

      最后,希望大家喜欢这个项目,在边玩边学习的同时收获到有用的知识!😊

      发布在 A Series
      baiwen
      100ask
    • DshanMCU-R128s2-EVT 最全最强最丰富的企业评估套件来啦!!!

      微信图片_20231019155513.jpg

      微信图片_20231019155507.jpg

      微信图片_20231019155511.jpg

      微信图片_20231019155458.jpg

      发布在 A Series
      baiwen
      100ask
    • 回复: 让T113-S3的TVIN吃上trecorder的本地预览套餐

      @baiwen 已经搞定
      84f1fef1-5066-49c7-93a2-689073709bc5-6aecaa25e15e7106681c14411cf6b2f.jpg

      发布在 MR Series
      baiwen
      100ask
    • 回复: 让T113-S3的TVIN吃上trecorder的本地预览套餐

      @afu120 你好,我也遇到了相同的问题,请问您有解决么?

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【素材汇总】R128素材汇总

      主图

      主图_01.jpg
      主图_02.jpg
      主图_03.jpg
      主图_04.jpg

      详情

      详情_02.jpg
      详情_03.jpg
      详情_04.jpg
      详情_05.jpg
      详情_06.jpg
      详情_07.jpg

      详情_09.jpg
      详情_10.jpg

      发布在 公告
      baiwen
      100ask
    • 回复: 百问网 哪吒D1-H 双屏异显项目板来啦!!!

      @soso90 是的,HDMI + MIPI显示

      发布在 MR Series
      baiwen
      100ask
    • 百问网 哪吒D1-H 双屏异显项目板来啦!!!

      您还在为拿到D1-H不知道可以做什么而苦恼么?
      您还在为拿到D1-H不知道学什么而苦恼么?
      您的D1-H板还在吃灰么?
      d072e70d-6611-4237-9563-4b7e1a40a3c2-2743a471049ecbb53dd07ce7eda0d06.jpg
      这次我们专门针对于D1-H的显示特性,推出了首款D1-H项目板,专门用来学习 双屏异显项目,提供深入的MPP开发教程,显示接口开发教程等,欢迎大家了解!

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请问D1H怎样接jlink开发板呢?

      @gb2047 只用过平头哥的Cklink,没有试过Jlink

      发布在 MR Series
      baiwen
      100ask
    • 回复: 万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的图我们赠送 R128 DevKit板+U盘资料!

      @baiwen b2919670-24f7-475c-afee-849ac9e84d7a-132395bbe9f821ac998b25ca0079691.jpg 某位不知名大佬 YuzukiHD 推荐参考这种风格

      发布在 A Series
      baiwen
      100ask
    • 万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的图我们赠送 R128 DevKit板+U盘资料!

      a6a1ffb0-e11e-455c-8c3b-bae31587dbd9-image.png

      万能的群友,如何才能表达出R128三核异构的独特之处,能做出形象的表达图 我们将赠送 R128 DevKit板+U盘资料(价值至少300RMB)!

      发布在 A Series
      baiwen
      100ask
    • 回复: 编译buildroot,编译出来的程序没法放到T113上运行。

      @shz18877605430 先确认一下T113上使用的 工具链类型是什么,是否有硬浮点支持,还是使用musl C库,如果一致,确认一下 你编译的这个程序是否有相应的 .so 动态库/依赖需要配合着 才能运行!

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 回复: SDK 如何下载

      参考阿志的SDK教程 ttps://d1.docs.aw-ol.com/study/study_3getsdktoc/
      另外建议您放一下出错的截图信息,方便分析 解决问题!

      发布在 MR Series
      baiwen
      100ask
    • 回复: 全志D1固件烧录系统启动卡住

      @haaland 通过启动logs看,应该是已经进入系统shell了,按下 回车键 看看有没有# 输出。

      发布在 MR Series
      baiwen
      100ask
    • 来了,百问网的工业场景专用学习开发板来了!!!

      09bec9d4-ee48-4f16-a6f4-2b3e3f2dc80d-58d5ddaa09031b18d9a49e6082a0919.jpg
      19696711-6157-4f49-8497-76e6c5115413-65f916125a6e5de3ce5692d6898ac74.jpg

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 回复: 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT

      千呼万唤始出来,前前后后多次改版,多次测验,终于可以上架了,感兴趣的小伙伴 可以优先体验,凭 aw-ol.com账号截图,可以减免 8 元 运费哦! 限量100pcs.
      https://item.taobao.com/item.htm?&id=736154682975

      发布在 A Series
      baiwen
      100ask
    • ubuntu 18编译 R818 TinaSDK 2.0 ROS包,提示 host python 错误,有遇到过的同学么?

      参考下图配置,使用ubuntu 18环境,尝试 安装了 python pip对应包,解决,发现问题依旧存在,
      目前认为是 host端 python存在不兼容问题导致,现尝试更换到Ubuntu 20看是否可以解决
      81cf680e-c4ee-4365-addb-f33d5ac94247-image.png
      a9f4c714-cc58-4c33-87ed-fdbf54160677-image.png
      f269f9b8-199c-49fc-9892-6f6fb64f372f-image.png

      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'
      
      

      923875d7-77d3-478e-9c5f-5cfb582c4e28-image.png

      查看了包的Makefile规则

      74623648-5e93-4006-85df-7b1d559df2c0-image.png

      找到软件包源码报错位置 out/r818-sc3917/compile_dir/target/host/python-dateutil-2.7.5/setup.py
      dc6c6332-9a37-4734-b972-0fd5f589b5b4-image.png
      我的主机环境这里 python 2.7 python3 都有

      82709d42-7756-47d7-bb14-b3293b3b00ef-image.png

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 回复: mCore R818使用genimage 打包镜像通过dd if烧录 提示如下错误!

      @awwwwa 感谢大佬的回复,我通过分析 build/pack 使用 ./build.sh packraw
      找到了下面那个最终生成的命令
      c19acd14-595f-406c-9374-4dba960b0427-image.png

      fded34af-2f9f-46d8-8648-5b2d5a9d9b93-image.png
      然后把 programmer_img 丢进 buildroot 打包目录,直接编译打包,生成的镜像就可以直接用啦!
      bb1056bc-0d52-41b5-bb02-b1c10b7e6b3b-image.png

      sunxi_gpt这个我学习一下 怎么融进去 让他自己转换打包。

      不得不说,这个 programmer_img 很强大,但是里面怎么实现的我很好奇,当时修改了各种 genimage.cfg的分区类型和头部都不行。

      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 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
      

      9cb80675-769a-4de6-8bcd-1a592465a5b1-image.png
      完整启动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 ***
      
      
      发布在 其它全志芯片讨论区
      baiwen
      100ask
    • 100ASK-V853-PRO开发板支持yolov5模型部署

      100ASK_V853-PRO开发板支持yolov5模型部署

      0.前言

      ​ 本章节主要讲述如何获取yolov5单阶段目标检测算法,并将yolov5原始模型转换为ONNX格式。使用模型转换工具进行模型的转换,并将转换后的模型部署到开发板上。

      ​ 本章使用的软件列表:

      1. anaconda(Windows)
      2. Git(Windows)
      3. Tina SDK(Linux)
      4. 全志NPU扩展包(Linux)
      5. 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
      

      image-20230613182944474.png

      如果您使用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,测试环境是否搭建成功,执行后会自动下载模型权重文件

      image-20230614115122455.png

      这里下载速度可能会很慢,建议直接访问官网下载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格式。

      image-20230619163348744.png

      执行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
      

      image-20230619164049085.png

      执行完成后会在yolov5项目目录中生成一个名称为yolov5s.onnx的文件,如下图所示:

      image-20230619164141069.png

      2.2 简化模型

      ​ 由于转换的模型是动态 Shape 的,不限制输入图片的大小,对于 NPU 来说会增加处理工序,所以这里我们需要转换为静态 Shape 的模型。

      ​ 需要安装 onnxsim 工具,在conda终端输入

      pip install onnxsim -i https://pypi.doubanio.com/simple/
      

      image-20230614145945598.png

      然后使用这条命令转换:

      python -m onnxsim yolov5s.onnx yolov5s-sim.onnx --input-shape 1,3,640,640
      

      image-20230625153004215.png

      执行完成后会导出名为yolov5s-sim.onnx文件,文件位于yolov5项目文件夹下,如下图所示:

      image-20230619164602355.png

      2.3 查看模型

      使用开源网站Netron网站

      https://netron.app/

      访问上面网址查看模型结构。

      image-20230619165052151.png

      选择yolov5s-sim.onnx文件,点击打开。

      image-20230619165209306.png

      查看如下图所示输出节点

      image-20230625153134978.png

      可看到模型有 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
      

      image-20230619175830410.png

      将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
      

      image-20230619181406282.png

      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
      

      image-20230621183150357.png

      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
      

      image-20230619181548262.png

      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
      

      image-20230619181729205.png

      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}
      

      image-20230619181923864.png

      将生成的network_binary.nb文件拷贝出来备用。

      4.YOLOV5端侧部署

      4.1 配置yolov5端侧部署环境

      ​ 在进行端侧部署前,由于后处理需要使用OpenCV库,所以请先按照如下步骤

      • 配置NPU拓展包:https://forums.100ask.net/t/topic/3224

      • 配置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/目录下。

      image-20230625170009845.png

      保存并退出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
      

      image-20230625171158725.png

      主机端:

      将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更换为自己的模型路径,下面我以默认的模型文件进行测试。
      image-20230625172157448.png

      查看输出图像文件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)
      

      ![image-20230625172512521](${media}/image-20230625172512521.png image-20230625172512521.png)

      4.4 测试其他图像

      对于人形的识别,该模型还是比较准确的

      image-20230625175804726.png

      对于交通道路这种复杂的情况,对于行人丢失些许目标,但对于车辆效果很好,丢失情况较少。

      image-20230625180437728.png

      测试动物,对于动物的检测该模型是十分准确的,检测效果即预测精度都较高。

      image-20230625181808524.png

      image-20230625184657791.png

      发布在 V Series
      baiwen
      100ask
    • R128适配SPI LCD+LVGL

      硬件

      • 板子: 全志R128开发板
      • 屏幕:SPI LCD 1.54寸 240x240分辨率

      bc93af96-fefc-4d7b-8268-afcc6a54e2f7-ccee4b66-13a0-4a8f-9f70-749ce8a0d94f.jpg

      效果演示

      [Video]

      发布在 A Series
      baiwen
      100ask
    • 请问各位大佬,D1-H 主芯片是否有完整支持的 MPU电源芯片,省去DCDC?

      请问各位大佬,D1-H 主芯片是否有完整支持的 MPU电源芯片,省去一堆DC DC?
      a191b277-bdc0-45e5-a26f-9c44e6cc1599-image.png

      发布在 MR Series
      baiwen
      100ask
    • 100ASK_V853-PRO开发板支持按键输入

      100ASK_V853-PRO开发板支持按键输入

      0.前言

      ​ 100ASK_V853-PRO开发板上共有5个功能按键,本章节跟大家讨论如何使能这五个按键。

      image-20230417154108195.png

      1.V853功能按键原理

      ​ 100ASK_V853-PRO开发板上提供的5个按键是通过GPADC高精度数模转换模块模拟出5个功能按键。GPADC 是 12bit

      分辨率,8 位采集精度的模数转换模块,具体通道数可以查看对应的 spec 说明⽂档,模拟输⼊范 围 0〜1.8V,最⾼采样率

      1MHz,并且⽀持数据⽐较,⾃校验功能,同时⼯作于可配置⼀下⼯作模式:

      1. Single mode:在指定的通道完成⼀次转换并将数据放在对应数据寄存器中;
      2. Single-cycle mode:在指定的通道完成⼀个周期转换并将数据放在响应数据寄存器中;
      3. Continuous mode:在指定的通道持续转换并将数据放在响应数据寄存器中;
      4. Burst mode:边采样边转换并将数据放⼊ 32 字节的 FIFO,⽀持中断控制。

      image-20230417172938775.png

      ​ 部分 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
      

      配置完成后如下图所示。

      image-20230417174743552.png

      保存并退出内核配置界面。

      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 
      

      选中完成后如下图所示。

      image-20230417183138871.png
      保存并退出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
      
      发布在 V Series
      baiwen
      100ask
    • 100ASK_V853-PRO开发板支持4寸MIPI屏

      100ASK_V853-PRO开发板支持4寸MIPI屏

      0.前言

      ​ 由于之前我们已经适配过RGB屏,如果我们去适配了4寸MIPI屏,那么RGB屏就不能使用了。对于4寸屏购买链接为:

      image-20230413093019260.png

      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屏驱动,编译到内核中。

      image-20230412141639648.png

      保存并推车内核配置界面。

      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屏驱动。

      image-20230412143445778.png
      保存并退出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。

      image-20230414193438036.png

      &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,如下图红框内所示。

      image-20230417101852786.png

      注意:我们这里修改的是头文件,可能之前编译生成过了之后再重新编译时可能不会再编译头文件,导致修改的节点不会生效,可以手动删除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屏接口,注意排线的线序是否一致。

      image-20230417120449282.png

      ​ 接完排线后,重新接入电源,和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.
      
      发布在 V Series
      baiwen
      100ask
    • 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

      image-20230411160118610.png

      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)
      

      如下图所示:

      image-20230411185022055.png

      选中后,通过方向键选择Save,按下回车。

      image-20230411185717558.png
      按下后会提示您是否确认保存备份,选择OK

      image-20230411190013770.png

      此时我们所修改的配置将保存在tina-v853-open/kernel/linux-4.9/.config文件中,继续按下回车退出。

      image-20230411190051184.png

      保存完成后,通过方向键选择Exit,一直选择Exit,直到退出内核配置界面

      image-20230411190138923.png

      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)  --->
      

      如下图所示:

      image-20230411192759836.png

      选中后,通过方向键选择Save,按下回车。

      image-20230411185717558.png
      按下后会提示您是否确认保存备份,选择OK

      image-20230411190013770.png

      此时我们所修改的配置将保存在tina-v853-open/brandy/brandy-2.0/u-boot-2018/.config文件中,继续按下回车退出。

      image-20230411190051184.png

      保存完成后,通过方向键选择Exit,一直选择Exit,直到退出uboot配置界面

      image-20230411190138923.png

      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 = <&reg_aldo2>;
                      //ctp_power_ldo = <&reg_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 = <&reg_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
      

      如下图所示

      image-20230412150545791.png
      保存并退出内核配置界面

      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屏,同时连接排线时需要注意排线的线序是否正确。

      image-20230412101223261.png
      连接好七寸屏,再连接电源线和两条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.
      
      发布在 V Series
      baiwen
      100ask
    • 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,注意扫描前需要检查天线是否安装好,安装位置如下图所示。

      image-20230411145903077.png

      检查安装完成后,在开发板的串口终端输入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
      

      ​ 此时从路由器上引出一条网线,插上开发板的有线网口处。

      image-20230411153509284.png

      当网线插入开发板后,开发板的串口终端则会输出以下信息,表示有线网络已经连接成功

      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
      
      
      发布在 V Series
      baiwen
      100ask
    • 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继续进行烧写系统。

      image-20230411103712913.png

      ​ 在我们连接好开发板的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设备,进入烧写模式设备管理器会弹出一个未知设备。

      Windows_FlashDevice_001

      接下来鼠标右键点击这个未知设备,在弹出的对话框里, 点击浏览我计算机以查找驱动程序软件。

      Windows_FlashDevice_001

      之后在弹出新的对话框里,点击浏览找到我们之前下载好的 usb烧录驱动文件夹内,找到 UsbDriver/ 这个目录,并进入,之后点击确定即可。

      Windows_FlashDevice_001

      注意进入到 UsbDriver/ 文件夹,然后点击确定,如下图所示。

      Windows_FlashDevice_001

      此时,我们继续点击 下一页 按钮,这时系统就会提示安装一个驱动程序。

      在弹出的对话框里,我们点击 始终安装此驱动程序软件 等待安装完成。

      Windows_FlashDevice_001

      安装完成后,会提示,Windows已成功更新你的驱动程序。

      Windows_FlashDevice_001

      最后我们可以看到,设备管理器 里面的未知设备 变成了一个 USB Device(VID_1f3a_efe8)的设备,这时就表明设备驱动已经安装成功。

      Windows_FlashDevice_001

      安装完成USB驱动后后续即可正常使用烧录功能。

      5.2 烧写系统

      全志线刷工具:AllwinnertechPhoeniSuit

      image-20230411103712913.png

      ​ 在我们连接好开发板的12V电源线,并将两条Type-C分别连接到开发板和电脑端以后,打开PhoenixSuit烧写工具,

      打开软件后 软件主界面如下图所示

      PhoenixSuit_001

      接下来 我们需要切换到 **一键刷机**窗口。如下图所示,点击红框标号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编号,用于后续连接使用。

      QuickStart-01

      如上图,COM号是96,我们接下来连接所使用的串口号就是96。

      image-20230411115306782.png

      打开软件后新建会话后,第1步选择串口功能,第2步在串口端选择CH9102的串口,第3步波特率设置115200,第4步流控选择None,第5步选择OK。

      选择后进入了串口界面,此时可能会没有输出信息的情况,按下回车键即可进入tina开发板控制台。

      image-20230411120726349.png

      如果此时想重新查看启动信息,可以在终端输入reboot,或者在开发板上按下reset键。
      image-20230411121346386.png

      上述为启动完成的信息,可以看到Tina Linux的标识

      发布在 V Series
      baiwen
      100ask
    • 回复: 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT

      号外号外
      预计R128模组价格 29.99,
      最小核心板价格 59.99 ,
      还会做一个带屏幕摄像头的开发板套装版本 预计价格 499。

      发布在 A Series
      baiwen
      100ask
    • 全志R128开发板来啦!RISC-V C906 + Arm M33有机结合,支持 Wi-Fi/BT

      模组

      Pin2Pin ESP32S3

      可以直接无缝焊接使用(但是软件不是兼容的,R128支持的是FreeRTOS系统)。
      R128开发板4.jpg

      来一张超高清对比图
      FtA8SRxaAAM1hhx.jpg

      系统已经启动,来一张启动log图证明一下:

      41612ce3-aa97-4bf7-901a-26ef49438326-image.png

      启动流程示意图
      e854ca31-4c0b-4ac4-a8e2-9eabdd4339ad-image.png

      (屏蔽盖镭雕丝印打错了,应该是R128-S2,之前是想做S3的,因为样片还没到位,先做了S2)

      补充价格信息(预估):
      预计R128模组价格 29.99,
      最小核心板价格 59.99 ,
      还会做一个带屏幕摄像头的开发板套装版本 预计价格 499。
      (芯片价格全志原厂还不让透露,只能说非常美丽,不然我们模组也做不到29.99这么便宜)

      发布在 A Series
      baiwen
      100ask
    • 回复: DongshanPI-D1s 烧录tina linux到spinor存储器后,无法通过xfel在编程了

      我们也发现了这个问题,目前怀疑是 xfel无法完整擦除 spi nor导致的错误,可以尝试先使用 凤凰烧写工具 烧写一下 这个镜像,之后再通过 xfel去下载裸机程序,就可以正常使用了!
      af143ace-307a-4a81-8b71-d1a457f8e19f-image.png
      一定要选择 为 分区擦除升级
      镜像文件: rtos_16M.img

      正常输出
      9fce2a47-2e7f-48b7-ad17-452f21d77216-image.png
      7fb6399a-ed70-466a-a264-4a5b83b36f2a-image.png

      发布在 MR Series
      baiwen
      100ask
    • 测试V853发现一个TF卡功能发现很诡异的现象,有经验的小伙伴可以看出问题么?

      插上TF卡,进入uboot下执行 sunxi_card0_probe 正常识别,也可以读取文件到内存,看起来是正常的
      109e4f3b-0d71-408b-b414-1f872ad1d628-image.png
      但是一旦内核启动,就会出现如下类似的错误, 似乎是数据发不过去,但是看起来又能识别到卡设备 以及容量大小,
      尝试过 修改 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
      
      
      发布在 V Series
      baiwen
      100ask
    • 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超高配。
      让性能可以充分发挥。
      6cd4c762-dfb0-4d5b-a3e4-b7c1f9cfbff4-a91981dad167efa6cb5222be6efc63a.jpg
      更多资料 敬请期待!!!

      发布在 V Series
      baiwen
      100ask
    • 回复: D1 Tina-SDK V2.1编译直接报错!

      @baiwen
      强行替换 tina-sdk v2.0的 lichee/brandy-2.0 到V2.1版本,可以暂时略过BOOT部分,继续往下编译,报错再说。
      768be204-24a3-44b8-84a1-bbf8ff4ccf33-image.png

      dc756127-1254-4f52-b084-d3c2e50225f6-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 通过CK-Link lite 连接dongshanPI-D1s失败

      长按FEL键,同时按一下 RESET键 会自动进入烧录模式。 这时再使用T-Head server 连接。

      发布在 MR Series
      baiwen
      100ask
    • D1 Tina-SDK V2.1编译直接报错!

      今天看到 全志在线 服务中心 更新了 D1-H 的TIna-SDK ,看到修复了很多BUG,决定下载下来 应用更新到DongshanPI开发板上。
      02a5cf16-2d23-4449-968d-ceb224351d1f-image.png
      获取源码后,编译 make直接提示 gcc不存在,似乎是环境那里的问题。
      0b237d26-6c38-48c0-82ad-6d80e7cd901a-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请问,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>;
      
      	};
      

      5ce9643d-da9b-470a-9252-ee15db86f773-image.png
      a9e1f7c5-ff7f-453f-b7a0-3b2611c94653-image.png
      231f8302-5594-489c-a874-7ce8401e0b61-image.png

      发布在 MR Series
      baiwen
      100ask
    • 请问,D1 Tina-SDK内的 FT5x 内核模块驱动源码在哪里呢?

      最近在给D1/s支持一款 MIPI显示屏,屏幕型号用的是 FT5336G 看到 Tina_SDK 配置里面有这个选项,想着 应该是有现成的源码,如果那位大佬有,方便的话请提供一下,如果没有就只能慢慢魔改支持了。
      d0c6e1d6-16e9-495a-863a-6a4ea94fe4bb-image.png

      f655d47f-19c2-4f6d-aaf4-f2c2dc6b9a5a-image.png

      1e2747b0-d917-4a3e-9fd8-2c4183ab4af5-image.png

      支持Nezha MangoPI YuzukiHD DongshanPI等系列。
      52fcb08b-a415-49f8-b9de-69e530e520ee-image.png

      发布在 MR Series
      baiwen
      100ask
    • 基于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调试、串口打印,并将主芯片所有的信号全部引出,其中左右两侧兼容了树莓派的电源信号定义,可以很方便扩展模块。

      图片1.png

      • 板子资料: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课程配套通用资料”对应的百度网盘地址,请自行下载。本课程主要使用下图所示的软件:
        图片2.png

      • 《RISC-V体系结构编程与实践》的D1S源码:
        打开 https://gitee.com/weidongshan/riscv_programming_practice 登录后按如下界面操作:

      图片3.png

      点击“克隆/下载”按钮之后,如下点击“下载ZIP”即可:

      图片4.png

      如果你没有点击“下载ZIP”,而是使用GIT命令来下载,那么下载成功后还需要执行如下命令:

      git checkout DongShanPI_D1
      
      发布在 MR Series
      baiwen
      100ask
    • 回复: MangoPi Dual T113 主线内核编译记录

      @ftwtwzy 好的,谢谢

      发布在 Linux
      baiwen
      100ask
    • 回复: MangoPi Dual T113 主线内核编译记录

      @evler 在 MangoPi Dual T113 主线内核编译记录 中说:

      sudo dd if=awboot.bin of=/dev/sdd bs=1024 seek=8
      神奇,使用百问网的t113 pro开发板,不管改不改内核设备树里面的 uart接口,都是boot启动不了 内核,明天再排查排查🤒
      5f867373-0a3b-4e30-8a96-1aa4c900d86d-image.png

      发布在 Linux
      baiwen
      100ask
    • 请问,有人在D1s成功运行过主线Linux系统么?

      147de011-6bcf-4a45-828c-8d87f3f2fce1-image.png
      修改 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,打包方式保持不变
      烧写启动,提示如下
      8ad3e971-391a-4067-bb84-fcd4f473fc43-image.png

      发布在 MR Series
      baiwen
      100ask
    • 请教各位大佬,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

      fab41273-30a9-40b7-9ecd-35e77d8b0640-image.png
      c6993bf7-2462-47a4-88b2-2bc0885b5ea1-image.png

      https://github.com/DongshanPI/DongshanPI-D1s_BareMetal/tree/master/source/sys-dram.c

      bf4c1d6b-8f25-4170-8980-2fa17bf8fdef-image.png

      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;
      }
      
      发布在 MR Series
      baiwen
      100ask
    • 嵌入式LinuxAI开发卷起来!!!

      感谢@YuzukiTsuru 大佬的认可和支持,授权给我们生产销售V851s蜥蜴 H616变色龙开发板,目前开发板已经售卖,文档已经在逐步支持并发布中,争取给大家提供一个最有趣完善的快速上手版本。
      https://dongshanpi.com/YuzukiHD-Lizard/01-BoardIntroduction/
      6c65b8b3-508f-4ac1-ade0-e5c2c8fdc5f1-image.png
      a1d7ae54-4c63-495e-8a26-37acb8f36eab-image.png
      不过单只有快速上手怎么能满足大家的需求呢?
      为此我们专门花了非常大的精力提供一个 针对于全志Tina-sdk源码的在线开发文档中心,可以深入学习了解更多关于Tina-SDK产品级的知识。
      https://tina.100ask.net/
      b06ed38f-b933-46f4-9926-758409c05ba7-image.png
      cac9d4a2-0f0a-4471-a66f-50346f2d0f15-image.png

      我们的文档都是采用了CC4.0 协议,大家可以直接COPY使用,另外我们会逐步完整支持 D1-H D1s T113 V851 V853等系列。

      顺便给大家透露一下 我们自己也做了一款全功能的 V853教育开发板,感兴趣的同学可以关注一下哦!
      d20067ca-4ecb-4832-9613-3f80f1941ee4-image.png

      发布在 V Series
      baiwen
      100ask
    • 回复: 请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!

      @aozima 我专门对比了 xfel 和 sun20i_d1_spl MQ 发现是一样的,
      4eb47712-4865-4e5d-a610-3cfbc29fc34e-image.png
      b6e1a8ce-fd34-407d-bbb4-5a419a7f93ae-image.png

      发布在 MR Series
      baiwen
      100ask
    • 请教大佬,有没有开源支持D1s SPINor RTOS系统的boot引导程序,可以直接跑RTOS系统那种!!!

      经过漫长的折腾工作,DongshanPI-D1s V2版已经回来,但是无奈 发现了很多坑!!!
      95904544-00a2-4375-869a-6fd960d77425-bf2d562a0c2aa3bf03cc14f26c05fc5.jpg
      我们想把它作为一个RISC-V的RTOS教育开发板,但是看起来它更适合跑Linux系统😖

      问题一

      BL702模拟CKlink固件 无法和TF卡同时使用,这也就是说,我们无法同时用TF卡和Cklink功能
      详情看: https://forums.100ask.net/t/topic/1683/3

      问题二

      单独使用Cklink烧录Yoc系统,原本计划使用它们的那套工程来进行烧录,但是最后发现是一个product bin文件来进行的烧录操作。
      cdf2c00d-b142-449f-a61d-3274982e138b-image.png
      看来没法通过Yoc的CKlink烧录方式进行单独烧录了。
      换个思路使用Melis系统那套打包工具进行单独替换 RTOS系统来加载启动,但是最后发现 也是一堆bin文件 按照特定的格式打包才可以,最后使用凤凰烧录工具进行烧录,也是麻烦。

      问题三

      抛开上述两种使用 平头哥Cklink 和全志的凤凰烧写工具打包烧录,
      第三种全部使用社区主线的 源码,进入uboot下进行烧录操作,
      但是我参考了xfel里面的 ddr2参数,启动到boot部分就凉凉,难不成D1s和F133的ddr参数不同?
      488425a4-3417-4589-bb93-785c20fab9c6-1ed40025604f522d2e504cd4177b2fc.png
      然后无奈,继续尝试使用把Tina-SDK里面的 spi nor镜像 boot0部分 boot-package部分,单独抽取出来,进行烧写,可是xfel在spi nor有系统的状态下一直无法擦除。无解

      最后只能还按照我们支持的tina buildroot那套,把kernel换成rtos镜像,然后打包成一个可以烧录的镜像 最后使用凤凰烧写工具烧写启动,但是这样也太麻烦了吧。。。

      各位大佬 有什么好的建议 或者思路 欢迎留言,不胜感激!!!

      发布在 MR Series
      baiwen
      100ask
    • 请教各位大佬,Melis是如何将编译出来的 melis.elf app等文件打包进melis.img生产一个可以烧录的系统!

      这次我们也设计了一个 板载CkLink的D1s RISC-V教育开发板,目的是为了用来学习RISC-V体系架构与编程,裸机开发,YoC RTOS系统(已支持helloword),RTT等系统。
      bb81255b-183a-4271-a7e8-1c8ebd8425e8-image.png

      这两天有看到RT-Smart支持了D1s的RTT系统,但是是基于SDCard或SD-Nand存储实现,因为我们的板子flash是NorFlash,所以想研究一下怎么在NorFlash运行。

      编译RTT

      • 参考 https://mp.weixin.qq.com/s/XznlHTqiTijgJ8uwPWXBBw
        800b69c3-bdd8-4e0d-808c-45184eef8f9b-3f5c72834090c19dec6e311c7c8f444.png
        最后编译生成对应的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
      
      
      1. 首先最后打包成一个完整可以烧录的镜像 没有变化 还是使用 dragon 根据分区配置文件统一生成。
      do_finish
       555         do_dragon image_$1.cfg sys_partition_$1.fex
      do_dragon()
        602     dragon $@
      
      1. 继续倒着 往上看
      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
      f526df91-89ae-492e-868e-58a70be8cb06-image.png
      7684e842-6558-48fe-81de-fdc1a187aa21-image.png
      从上图可以看到,他的分区只有3个,首先排除最后一个分区UDISK,是一个没有文件的空分区,然后 就是ROOTFS分区和 bootA分区了,然后根据 downloadfile名称来看,更像是bootA分区里面存放了melis.elf文件。
      但是这个我没法解包,也无从得知是哪里得到,无果,继续往上看

      1. 打包过程分析
      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,亦或者其它我不知道的,
      d86d1f35-4aa0-470d-8f8f-1a04c17b9cac-image.png
      具体单板工程下的 epos.img是做什么用的?
      /D1s-Melis/projects/d1s-nezha/sbi-bin$ cat osinit 里面为什么指定了 melis30.elf文件,但是这个文件到底是何时被编译打包进去,前面为什么有target这个 gdb调试地址,是否是调试时才需要的。
      b8988b43-f76e-493a-bda5-30a1c2dbfaff-image.png

      7f1a8da5-aaea-475a-9de5-ceac03d5b127-image.png

      另外但从启动信息看
      6082e7af-eb6c-4801-a22d-dbad688d67e0-image.png
      第一部分首先是 boot0 也就是norflash ddr头部信息,然后是一个 所谓的复合bin里面应该包含了opensbi部分 melis kernel本身,可能还有uboot部分和env启动参数部分。
      后面就是加载melis kernel的log日志信息了,请有知道的大佬提点一二!!!

      后面我尝试从 烧录 编译好的Melis系统镜像打印信息来分析 烧录过程,看是否可以反推出对应位置等。

      发布在 MR Series
      baiwen
      100ask
    • V853我们来了!!!

      感谢全志在线的大力支持,感谢晕哥的芯片支持,也感谢YuzuKi,芒果大佬的指点,我们终于设计好了 V853开发板核心板与底板,接下来将会进行打样生产,作为AI入门 与 多媒体框架学习的配套专用开发板。

      • 下图,左侧是V853核心板是BTB封装,右侧是YuzuKi大佬赏脸打100ask设计的V851s最小板。
      • V851S最小板,我们会将售价做到低至99元单板,接口丰富而且完善,详细的参数可以 @YuzukiTsuru
        2f52f2c6-676d-473d-9440-bea186eed507-image.png
      • 下面这张图是 配套的 项目1底板,我们暂且叫他 全功能底板,这个板子是用来学习Tina-SDK 开发与摄像头显示等,同时,我们正在设计针对于不同场景需要的不同底板,可以共用一款核心板。
        d0515e29-fd82-4150-a23b-a373ac199494-75e485ffd409f93830baa3c4caca0bb.jpg
      发布在 V Series
      baiwen
      100ask
    • DongshanPI-D1板载RISC-V调试器,作为一款全国产RV64底层学习开发板,期待您的加入!!!

      经过漫长的等待,百问网联合 全志在线x阿里平头哥xSipeed 共创的全国产RISC-V体系架构学习开发板来了,它的定位主要是偏向于喜欢研究底层的同学,如操作系统,裸机程序,驱动模块等。
      板子板载了D1s的RISC-V调试器,可以直接进行芯片级的调试开发,同时平头哥会针对这个板子支持CDK RT-Thread也会去支持,当然还有更多更多。
      a7efa70b-4815-4ec8-b51f-f0a63f032095-image.png
      另外,我们内部主要支持Linux和一款RTOS,对于有能力且感兴趣的同学,可以在此开发板上发挥你的长处,实现一些功能,我们将会给予赞助,可以是开发板,也可以是 我们的课程,当然也可以是Money。
      我们征集的内容不限,可以是 一个新的系统 一个Linux传感器模块的完整示例 也可以是一个新的裸机Demo ,反正您做的越多 我们能赞助给您的费用就越多。

      • 擅长做底层系统的:可以在我们的板子上移植新的操作系统,可以是FreeRTOS、RT-Tthread、YoC等
      • 擅长做组件的:制作一个组件库/包,如MQTT 库等
      • 擅长做应用的:开发一个应用,比如传感器的一个混合应用

      如果您想要实现相应的功能,可以在 https://forums.100ask.net/t/topic/1307/4 下面留言,当然也可以在此贴下留言,同时为了避免大家做重复的工作,尽量一个模块/系统 最多3个人做。

      发布在 MR Series
      baiwen
      100ask
    • 回复: 第一次调试D1 MIPI DSI 发现一些奇怪问题,也不知道到底是哪里出了问题。。。
      • 亮屏成功,这个时钟和时序真的是离谱,错一个都不行,试了两天,自己粗心误把HBP认为HeightBP,另外接下来我们将提供 带电容触摸版本 以及 不带电容触摸版本,可直接连接到 MangoPI MQ-Pro AW-OL NeZha公板,T113等版本,为大家提供一个高性价比的双LANE 480x800的MIPI屏模块。
      发布在 MR Series
      baiwen
      100ask
    • 第一次调试D1 MIPI DSI 发现一些奇怪问题,也不知道到底是哪里出了问题。。。

      最近想给D1配一款MIPI显示屏,但是在调试过程中出现了一些很奇怪得现象,因为是第一次接触MIPI显示屏,所以有点不知所以。。

      其中屏幕使用的是 ILI9806E DSI接口分辨率为480x800
      2b92b675-9355-4a4c-988a-db7c0261445a-image.png
      目前认为主要是 屏幕时序不对导致的问题,但是屏厂能提供的资料非常有限,还是需要慢慢排查....
      85f1d59b-a069-4ecf-9a38-6bbc19bfd536-image.png

      • 设备树节点定义
      &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,
      	},
      };
      
      
      发布在 MR Series
      baiwen
      100ask
    • 悬赏令:横向支持更多板子, 纵向提供更多项目 DongshanPI-D1s教程征集活动!

      1. 不能学以致用?

      百问网从2011年使用S3C2440录制Linux视频,在2019年使用IMX6ULL等开发板重新录制视频。

      在我们10多年的培训生涯里,发现很多人学习时用A板,在工作中换了B板,他就不知道怎么做了。

      APP层面:它本应该支持所有Linux板子,实际使用时不是缺驱动就是缺库
      组件:它本应该支持有所板子,但是很可能因为缺乏某些依赖无法运行
      内核:内核里对于某款CPU核(比如crotex A7)已经支持得很完美了,你需要指定内存地址等等
      驱动:有了GPIO子系统、pinctrl子系统,针对板子修改一下设备树就可以
      我们完全可以编写一个APP、一个组件、一个驱动程序,使用同一套代码,在所有的板子上运行。

      我们的课程,已经实现了这一点,它可以支持D1H、T113等等开发板。

      对于快速入门,我们已经发布了这些视频,除了第3篇稍有不同外,其他都是一样的:

      68ccf498-5c72-4b04-b7aa-0267c868c23a-image.png 8298130f-cb16-412a-97b2-396f5182665f-image.png image
      image

      新发布的开发板教程在:第3篇:环境搭建与开发板操作

      2. 会抄就行!

      很多人觉得嵌入式Linux很难,APP开发难、驱动开发难、不会做项目!

      有些同学不想学习那么多的理论,

      那么,你会抄代码不?会抄就行!

      做毕业时,抄!修修改改就可以!

      工作时,抄!修修改改就可以!

      我们会从上到下扩展很多案例,让你学习、工作时,可以直接拿来修改使用!

      3. 悬赏活动

      3.1 D1S开发板配套项目

      百问网正在设计全志D1S开发板:

      a0a46d36-74b1-416c-bf76-8061b89c531a-a2d34a457062f249fd4f8d38ccd53ec.jpg

      • RISCV架构
      • 所有信号都引出
      • 板载CKLink调试器,无缝使用平头哥工具
      • 支持OTG烧写
      • 左右两侧排针兼容树莓派信号
      • 支持YoC系统
      • 支持RT-Thread等RTOS
      • 支持Tina-Linux
      • 支持社区Linux

      板子还有2周才出来,现在征集教程:

      1. 擅长做底层系统的:可以在我们的板子上移植新的操作系统,可以是FreeRTOS、RT-Tthread、YoC等
      2. 擅长做组件的:制作一个组件库/包,如MQTT 库等
      3. 擅长做应用的:开发一个应用,比如传感器的一个混合应用

      感兴趣的同学先加群一起讨论,等板子出来再宣布奖励方法。

      d3312b02-61e3-4d27-816f-bac9e7d977a0-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请教spi1 st7789V怎么移植配置开机logo?

      @hy123456 6 为什么不尝试在uboot阶段就显示logo 再折腾一遍?

      发布在 Linux
      baiwen
      100ask
    • 回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?

      @qinlinbi 其实都可以,uboot会根据配置,来进行选择。

      发布在 MR Series
      baiwen
      100ask
    • 回复: D1-H 超频 1.68GHz 测试,提升 67% CoreMark 跑分,ncnn 增速 24%

      @yuzukitsuru 这这这,是不是可以直接烤肉了。。

      发布在 MR Series
      baiwen
      100ask
    • 看图猜板,猜对的同学可以免费获得!

      给大家一点提示,这是一个 RTOS/Linux二合一开发板,板载芯片级调试器!
      82e20c5b-dfd2-4d4b-9820-78254ca26044-34f2f24e0de1edf995c801a80e9ff19.png [图片]
      8bdd955c-edce-4b44-886a-e5669bea9d86-企业微信截图_16603019423898.png [图片]

      发布在 V Series
      baiwen
      100ask
    • 回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?

      @yteraa 感谢大佬的指点,已经可以,原来我已经找到了实现的代码,就是没有设置环境变量😥 。
      我现在使用buildroot定义
      a7699ae2-5a8e-4da3-8595-e223da095d0a-image.png
      ENV环境变量里进行了配置
      4d787ca2-e716-4e0e-954a-ecc9737e3a54-image.png
      保存后 重启,就可以看到它自动加载了

      e387d5a3-d232-4ca6-b19b-44a9a5305fcb-image.png

      看来以后还是要大胆去尝试
      8389b378-3760-47d3-8692-a5dff6b928aa-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?

      27c44429-ede8-4e6e-8caa-45613c5c8db4-image.png

      Tina-u-boot-2018\board\sunxi\sunxi_replace_fdt.c
      26980859-d143-4d2b-a251-d78f834f49a3-image.png
      uboot配置支持 CONFIG_SUNXI_REPLACE_FDT_FROM_PARTITION 选项,编译烧写,重新启动
      提示如下错误
      f8149ee8-b49c-4461-856e-f185359a4fec-image.png
      这里应该是加载到了设备树,但是启动时 无法启动
      7c6aa039-b51c-4c4e-aefd-5d828dcbfced-image.png

      发布在 MR Series
      baiwen
      100ask
    • 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?

      请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?

      发布在 MR Series
      baiwen
      100ask
    • 翻车了,蓝色D1-H 东山哪吒STU最小板,只能玩,不能用来连接扩展板,这可如何是好?

      这次批量回来了 蓝色D1-H 东山哪吒STU ,科技感要比红色主板高很多,无奈因为 做PCB时 粗心大意 选错了 PCB的板厚,导致无法连接扩展底板,只能忍痛重新生产!
      有那位同学知道 支持SODIMM 1.6PCB厚度的连接器,欢迎沟通交流。

      dd05aae0-a4cf-4978-8664-d2702f5d7a4b-image.png
      462641a1-3fda-4b6d-bc5f-d51c627832a8-image.png
      9e8d9c3f-d020-4992-acb2-ca813b138cbf-image.png

      另外这个板子,因为做了500pcs,只能倒贴处理掉了,😩
      不加flash的 主板 售价 66 邮费7元。
      加256 旺宏 flash售价99,包邮(需联系客服改价)。

      发布在 MR Series
      baiwen
      100ask
    • 回复: 【送开发板啦】百问科技基于全志D1-H定制的开发板——东山哪吒STU第一堂系统开发直播课堂

      @idaniel 我们的开发板硬件兼容了公板设计,所以 哪吒开发板 支持的 debian镜像 都可以直接在我们的开发板上 使用。

      发布在 MR Series
      baiwen
      100ask
    • 回复: D1-H/D1s真的要卷起来了!!!

      @feng_snail_aw 刚刚上架 热乎的很 https://item.taobao.com/item.htm?id=677988583398
      cdcd7363-aac5-4d89-9dee-4f69334e5487-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: D1-H/D1s真的要卷起来了!!!

      df0d7de3-44ae-4fe4-8938-917c102f0b1e-e0ee44ed8fbc9d2642d97c815235dc3.png
      02290132-aa41-4e69-ab89-3906925c96fb-b6705c6ceccdbd5b5a9921eb3678bc4.png
      ffd48a14-59cb-4866-977b-a7a4d4083061-d9037945690fd4161f20e4d137a6f94.png
      板子终于回来了,标配预售价 299 ,欢迎大家选购!

      发布在 MR Series
      baiwen
      100ask
    • LVGL+NES模拟器

      最近我有一个想法,既然LVGL能担任显示和外部输入(触摸和按键)的工作,为什么不用LVGL来写一个游戏模拟器呢?

      这是我的试验成果,只是简单的效果还没有进行更多的优化,接下来我会继续添加更多的功能,大家觉得好玩吗?

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?

      最后放一张图。。。。。。。
      10d624ea-ce25-4928-99c1-73a14c0dbc29-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?

      问题已经解决,原因是 kernel 板级设备树 board.dts 要在父级设备树 根节点下 aliases 增加 节点 gmac0 = &gmac0;

      b415d855-ee70-4145-b4ff-a42fc1869300-image.png

      1da57658-62df-4814-8f7b-573e489b794a-企业微信截图_16553529977937.png

      其中uboot下要做几个配置。
      679204e9-950c-4f46-8502-504ed41efe0d-image.png
      aac01161-fad4-44ac-a33c-256ece77b886-image.png

      有了这些以后 启动uboot进入终端内 就可以使用网卡设备了,具体可以分析
      Tina-u-boot-2018\drivers\net\sunxi_geth.c
      文件。

      1b25c933-875d-4caa-8356-05a85b2c5b61-image.png

      这个时候我们就可以接上网线 使用 网络方式 更新 内核 设备树了,大大缩短 拔 卡插卡 烧写系统 繁琐的时间浪费。
      设置一下
      网卡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
      15e9a8e3-b31c-4df5-b2c8-8f0928fd2f7a-image.png
      设置完成以后,把我们单独编译出来的 boot_package.fex 文件 boot.img 放到我们Ubuntu主机上的tftp目录下。
      我的服务器是 192.168.1.133

      tftp 43000000 192.168.1.133:boot_package.fex

      0cf04788-792e-47be-8b86-faad3fcc7b85-image.png

      下载完成后 执行如下命令 进行烧写。
      sunxi_card0_probe;mmcinfo;mmc part
      mmc write 43000000 0x00008020 0x1800
      注意:我这里烧写的是TF卡。
      820ac1f9-b850-4e28-af81-9ca39fccc55b-image.png
      烧写完成后 重启,你会发现 用的就是最新的 设备树了。
      这里有个问题,就是 原厂将 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内核镜像文件,然后启动即可。
      d3407727-cb5c-4b06-9f3f-ac185ba06a60-image.png

      启动信息如下
      644f20cd-9595-4127-b7a5-fd569e59a4ed-image.png

      那么到这里 我们就可以很方便开发你的设备驱动 调试了。
      当然你也可以用 nfs_rootfs网络根文件系统,这个 步骤网上很多文章 我就不再截图了。
      在使用tftp的时候 发现了一个很烦人的 log信息。
      CACHE: Misaligned operation at range [47fea2c0, 47fea2ee]
      发现在 Tina-u-boot-2018\arch\arm\lib\cache.c
      里面,我目前的做法是将其 注释掉,
      17bf7e8b-106e-4e68-afcc-5bd16b94c0f6-image.png

      但是个人感觉 这种做法不标准,应该有宏开关 去控制的。希望知道的同学告知一下。

      发布在 MR Series
      baiwen
      100ask
    • 请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?

      请教各位大佬,如何使能D1-H/D1s uboot下的有线网卡?

      发布在 MR Series
      baiwen
      100ask
    • 回复: 有D1S/F133连接以太网的参考吗

      可以参考我们的 100ask_D1s_PRO开发板 底板原理图,功能已经调通。
      869b646f-76cf-4add-936f-bfdbdb82d87a-image.png 100ASK_T113-Pro_Base-SCH.pdf

      发布在 MR Series
      baiwen
      100ask
    • 回复: 分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。

      @allwinnertech 知道了这些以后,后面就可以 直接抛开 任何的 自动构建系统,来从零自己撸Linux系统了。前面已经告诉了 大家怎么 兼容buildroot 编译各个部分。。

      发布在 MR Series
      baiwen
      100ask
    • 分析Tina打包流程,并在buildroot上来实现打包生成tina镜像,支持PhoenixSuit烧写。
      • 镜像文件 tina_d1-h-nezha_uart0.img 欢迎烧写体验。

      b8a097c7-e4fd-4a31-bb07-3c8290d7f572-image.png
      68352bac-9caa-446c-93be-13d799e7c306-image.png
      eb965c91-015a-4a29-9c32-07332ff0a424-image.png

      步骤简述

      首先记录下官方 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可以看出整个打包过程大致分为这么几个步骤

      1. 指定一些比较环境变量,比如镜像输出目录 镜像的一些配置信息。
      2. 之后将镜像拷贝到需要打包的目录下,开始进行统一处理
      3. 根据文件系统分区信息,将其转换成 适合后续程序使用的格式。
      4. 转换分区信息为 专门的GPT/MBR分区头部。
      5. 使用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 目录下查看。
      714dc37f-d024-4ffd-86e1-5dabd9519a13-image.png
      我们可以直接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二进制文件,目前我认为这些文件都是和全志官方的烧写工具绑定死的,所以不用管它,只要制作的时候 当前目录下有这些工具即可。
      d3bfa508-7883-4286-bda4-9bbbd981cd98-image.png

      有了这两个文件以后,就可以直接使用 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文件又是怎么生成的。

      64808bf4-975f-43bb-98a7-c9da0ce574f1-image.png

      同样是结合log 加打印
      a99c9ce5-8358-41c0-924f-25836a7db6ee-image.png

      找到了 如下这两个命令。
      busybox unix2dos sys_partition.fex
      script sys_partition.fex

      一开始以为这个 script 是ubuntu的某一个包,后来发现也是一个全志自家提供的工具。
      既然 工具都找全了 那我们可以修改试试看。

      修改 sys_partition.fex 把它的大小 调整为 70824
      c12aa287-2654-4674-aecd-563a9a0e735e-image.png
      之后保存退出,从头执行如下命令 来确认猜想是否正确。

      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 命令了,参考如下。

      分析文件系统生成方式

      72d42ef5-7dfe-4f6a-b9cb-a4bbc92602b0-image.png
      1c42a072-d173-4915-a342-93eab5e022ac-image.png
      ec4624ab-1368-434d-b409-56e15977b52c-image.png
      92a50753-628e-4338-bf6f-145ae53f7efd-image.png

      最后得到 这个
      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_dshannezhastu

      clone下来后,需要更新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

      编译完成后的输出信息。
      04ae1d5f-065b-4602-96ff-5325042b89b7-image.png

      镜像输出在 output/images/目录下
      77648afc-4b4c-45d3-81a7-64440c44a9f5-image.png

      发布在 MR Series
      baiwen
      100ask
    • 回复: 真离谱:使用主线Buildroot编译Tina Linux系统,然后使用全志官方PhoenixSuit烧写SPI NAND

      @yuzukitsuru 如何才能做到 使用Tina Linux,在不大改源码的情况下,使用dfu进行全部的烧写操作? 有没有参考的?

      发布在 MR Series
      baiwen
      100ask
    • 真离谱:使用主线Buildroot编译Tina Linux系统,然后使用全志官方PhoenixSuit烧写SPI NAND

      45dc8ab2-2639-487c-b9ad-b1f1d85ce05d-image.png
      39f8acdb-4079-404e-aa28-0d2baeecf1c2-8d39fa3751e3f033e74ba0e5455ca77.png
      这么做的用意到底何在?
      难不成 只是为了让大家更容易上手?
      e17f7c9a-7103-4ff6-bc78-640ef8518786-D1全新课程框架.png

      发布在 MR Series
      baiwen
      100ask
    • 1
    • 2
    • 1 / 2