aldfaaa 发布的帖子
-
解决D1s烧录时遇上ZQ校准错误(240欧已接好)
问题描述
在sys_config.fex正确配置uart_debug的前提下, 烧录时, 调试串口报ZQ校准错误:
- 已确认硬件ZQ脚接入240Ω电阻;
- 排除了sdk软件层面的问题;
解决方案
进一步检查DDR的供电发现:贴片的5819二极管反接了, 没有出发DRC(有可能是器件本身就错的), 导致片上内存LDO供电异常.
-
回复: 全志芯片Tina Linux 修改 UART 引脚、UART端口
挖一个古早期的修改UART帖
D1s分别在Tina Linx, Melis修改调试串口实录
https://bbs.aw-ol.com/topic/3194/share/1 -
回复: 求教,如何在D1-H板子上使用RVV指令集
@ht1123 抱歉, 久等了, 先上传个可以交叉编译的程序:
d1-baremetal.7z
用xfel将bin文件写到0x40000000即可执行. 至于汇编只需要熟练使用工具链参数即可. -
回复: Gaviar Handheld (小志掌機)
@steward 我们"爱搞机"小板块背后有着一大班热爱开源掌机的小伙伴社区期待着 司徒大佬 加入, 敢问司徒能加下QQ群吗?
-
[V3s]lc-v3s-sdk从spinand启动切换到TF卡启动
背景
某宝买的一块V3s板子
默认spinand启动, 想切换到从TF卡启动.探索过程
于是把spinand flash先清空一下以排除干扰项, 参考《使用 PhoenixSuit 清空NAND,eMMC,Flash存储器》
尝试I
将原来通过PhoenixSuit烧录的镜像(lc-v3s-sdk/tools/pack/cherrypi-v3s-linux.img), 直接用PhoenixCard4.2.7烧录到TF卡, 启动报: 无法启动输出.log
- 结合日志分析当前遇到什么问题?
uboot应该应该正常启动; 应该是卡在uboot启动kernel的环节. uboot已经能发现5个mbr分区;
sunxi flash read: start 18432, sector 128 <=> mmcboot read: start 0x4800, sector 0x80
并且创建hash表, 一切正常;
注意到, uboot上对fat文件系统操作还算正常; 以下指令均正常
fatdown - download data to a dos filesystem fatinfo - print information about filesystem fatload - load binary file from a dos filesystem fatls - list files in a directory (default /)
- 定位错误代码段
u-boot-2011.09\fs\fat\fat_write.c file_fat_read (const char *filename, void *buffer, unsigned long maxsize){ do_fat_read (const char *filename, void *buffer, unsigned long maxsize, int dols){ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster,dir_entry **retdent, char *l_name) { debug("Error: VFAT name is too long\n");
分析错误, 有可能指向无法访问一些东西. 这需要我们进一步反推高层调用fat操作的意图, uboot并不太复杂, 所以把关注点放在bootcmd相关的指令上;
解决方案
结合打包脚本的意图:
分析build_uboot()里的make参数sun8iw8p1_spinand_emmc
再结合分析uboot启动脚本并捣腾uboot里fat相关的工具, 发现其0:1分区是FAT格式.
uboot里emmc启动脚本是企图读取0:1分区里的uImage文件; 下图为uboot-env:
遂通过TF读卡器接入电脑, 将编译好的uImage复制到该FAT分区---正常启动;
rootfs也顺利地从/dev/mmcblk0p7读出并加载; - 结合日志分析当前遇到什么问题?
-
回复: 全志 D1H 驱动spi oled失败
[哪吒开发板]Tina Linux SPI主从通信验证实录
https://bbs.aw-ol.com/topic/3031/share/1 -
回复: [哪吒开发板]Tina Linux SPI主从通信验证实录
有朋友自行编译slave机发现结构体缺失成员, 发现diff遗漏了头文件的变更:
补上即可.
需要购买D1H官方哪吒开发板, 可以到我店铺看看 :
小叶芯片开发板店 -
回复: [哪吒开发板]Tina Linux SPI主从通信验证实录
@sfgy125110 我记得驱动默认是启用了DMA的, 所以你修改CPU接收过程的参数并不会生效. 手册有对两种SPI通信逻辑介绍
-
回复: D1-H可以做到4k录像吗
- 录像是指需要视频编码能力吗? D1H不支持H264硬编码, 但支持H264硬解码.
可以看看V系列的V853 - 还有4K摄像头有歧义, 直接说分辨率; 其二, 这么高的分辨率视频数据, USB 2.0的带宽吃得消? 不考虑下mipi CSI?
- 录像是指需要视频编码能力吗? D1H不支持H264硬编码, 但支持H264硬解码.
-
"RISC-V嵌入式开发线下交流会"4K高清实录
2023年4月9日, 深圳OP ACCELERATOR, 百问网联合深圳开源技术服务中心举办了《RISC-V嵌入式开发线下交流会》:
就在滨海鹅厂附近 (
大会开始前, 琳琅满目的奖品, 开发板和技术书籍:
韦东山老师的精彩演讲:
本坛坛主的精彩演讲
杨源鑫大佬(订阅号: 嵌入式研究院)的分享
晕哥颜值撑场
双倍多多冰, 我, 韦东山老师和晕哥的合影:
现场伙伴提出的部分问题:
- 应用都需要重新编译一次, 如何构建RISC-V软件生态?
- 嵌入式Python numpy库存在问题?
- 各架构的系统性调试技能课程?
- 为什么MCU开发很少做到"低内聚高耦合"?
- 实际项目应用中, RTOS和LINUX该如何选择与评估?
- RISC-V对如航空领域的高可靠的嵌入式开发有什么帮助?
- 怎么看到RISC-V碎片化问题?
- 中小学生有没有机会和条件接触, 甚至学习到RISC-V?
....
没提及疑问的可以发帖补充, 懂的大佬恳请慷慨回帖哈~
-
D1s分别在Tina Linx, Melis修改调试串口实录
背景
硬件小白画了块D1s板子, 调试串口的接线是:
针脚 功能复用 丝印 PE08 UART3_TX TX PE09 UART3_RX RX 调通调试串口=硬件Hello world
Melis玩法
首先修改了projects/d1s-nezha/configs/sys_config_nor.fex
@@ -79,9 +79,9 @@ twi_scl = port:PH14<2><default><default><default> twi_sda = port:PH15<2><default><default><default> [uart_para] -uart_debug_port = 0 -uart_debug_tx = port:PE02<6><1><default><default> -uart_debug_rx = port:PE03<6><1><default><default> +uart_debug_port = 3 +uart_debug_tx = port:PE08<5><1><default><default> +uart_debug_rx = port:PE09<5><1><default><default> [jtag_para] jtag_enable = 1 @@ -210,9 +210,13 @@ twi3_sda = port:PE07<4><1><default><default> ;uart configuration ;uart_type --- 2 (2 wire), 4 (4 wire), 8 (8 wire, full function) ;---------------------------------------------------------------------------------- -[uart0] -uart_tx = port:PB08<6><1><default><default> -uart_rx = port:PB09<6><1><default><default> +;[uart0] +;uart_tx = port:PB08<6><1><default><default> +;uart_rx = port:PB09<6><1><default><default> + +[uart3] +uart_tx = port:PE08<5><1><default><default> +uart_rx = port:PE09<5><1><default><default> ;---------------------------------------------------------------------------------- ;SPI controller configuration @@ -743,7 +747,7 @@ vo_vs = port:PD21<7><0><default><default> ;---------------------------------------------------------------------------------- [tv0] -used = 1 +used = 0 dac_src0 = 0 dac_type0 = 0 @@ -760,8 +764,8 @@ pwm_pin = port:PD16<5><default><default><default> [pwm1] pwm_positive = port:PD02<3><default><default><default> -[pwm2] -pwm_pin = port:PE08<4><default><default><default> +;[pwm2] +;pwm_pin = port:PE08<4><default><default><default> [pwm3] pwm_positive = port:PD04<3><default><default><default> @@ -837,12 +841,12 @@ pwm_positive = port:PL10<7><0><default><default> ;vinc(x)_sensor_list: use sensor list ;-------------------------------------------------------------------------------- [vind0] -vind0_used = 1 +vind0_used = 0 vind0_clk = 432000000 vind0_isp = 322000000 [vind0/csi0] -csi0_used = 1 +csi0_used = 0 csi0_pck = port:PE02<2><default><default><default> csi0_hsync = port:PE00<2><default><default><default> csi0_vsync = port:PE01<2><default><default><default> @@ -850,8 +854,8 @@ csi0_d0 = port:PE04<2><default><default><default> csi0_d1 = port:PE05<2><default><default><default> csi0_d2 = port:PE06<2><default><default><default> csi0_d3 = port:PE07<2><default><default><default> -csi0_d4 = port:PE08<2><default><default><default> -csi0_d5 = port:PE09<2><default><default><default> +;csi0_d4 = port:PE08<2><default><default><default> +;csi0_d5 = port:PE09<2><default><default><default> csi0_d6 = port:PE10<2><default><default><default> csi0_d7 = port:PE11<2><default><default><default> @@ -872,7 +876,7 @@ actuator0_afvdd = "afvcc-csi" actuator0_afvdd_vol = 2800000 [vind0/sensor0] -sensor0_used = 1 +sensor0_used = 0
然后发现编译,打包, 启动发现: PE08有输出了, 但是PE09无法输入Console; 遂探寻探寻UART驱动:
找一下包含uart关键字的文件, 大致推断其驱动源码(有生成.o的大概率就是有效的源码):find . -name "*uart*.c" ./ekernel/arch/riscv/csp/csp_uart.c ./ekernel/drivers/hal/source/uart/hal_uart.c ./ekernel/drivers/hal/test/uart/test_uart.c ./ekernel/drivers/hal/test/lpuart/test_lpuart.c ./ekernel/drivers/test/test_uart.c ./ekernel/drivers/drv/source/serial/uart_drv_dms.c ./ekernel/drivers/drv/source/serial/uart_drv.c ./ekernel/components/aw/multi_console/uart_console.c
追踪UART针脚功能复用的实现, 并反推高层调用链路:
ekernel/drivers/hal/source/uart/hal_uart.c: uart_pinctrl_init() { 实现了UART针脚的功能复用 } ekernel/drivers/hal/source/uart/hal_uart.c: hal_uart_init(){ uart_pinctrl_init(..); } 看看谁调hal_uart_init(): ./ekernel/drivers/drv/source/serial/uart_drv.c: .initialize=hal_uart_init 根据D1s的BSP层番号:sun20iw1可知: ./ekernel/arch/riscv/sunxi/sun20iw1/init.c: sunxi_driver_uart_init(...) { 123 #ifdef CONFIG_DRIVER_SERIAL 124 char uartname[6]; 125 void sunxi_driver_uart_init(void); 126 sunxi_driver_uart_init(); 127 sprintf(uartname, "uart%d", CONFIG_CLI_UART_PORT); 128 rt_console_set_device(uartname); 129 #endif }
原来还有一个CONFIG_CLI_UART_PORT值给到软件层面的console进行交互!
再搜CONFIG_CLI_UART_PORT发现: grep -irn "CONFIG_CLI_UART_PORT" .
.config就有具体的值.
于是: make menuconfig, 按'/'搜CONFIG_CLI_UART_PORT, 就可以合规的修改串口:
重新编译, 打包, 烧录, 调试串口一切正常.
Tina LInux玩法
修改device/config/chips/d1s/configs/nezha/sys_config.fex:
[uart_para] uart_debug_port = 3 uart_debug_tx = port:PE08<5><1><default><default> uart_debug_rx = port:PE09<5><1><default><default>
PS: 了解到sys_config.fex会经过转化成二进制文件, 在设备启动时会加载到boot0, 作为参数列表.
配置linux下的设备树的: device/config/chips/d1s/configs/nezha/board.dts
/* 修改 */ uart3_pins_a: uart3_pins@0 { /* For EVB1 board */ pins = "PE8", "PE9"; function = "uart3"; /* muxsel = <5>; */ drive-strength = <10>; bias-pull-up; }; uart3_pins_b: uart3_pins@1 { /* For EVB1 board */ pins = "PE8", "PE9"; function = "gpio_in"; }; ... &uart3 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart3_pins_a>; pinctrl-1 = <&uart3_pins_b>; status = "okay"; };
编译, 烧录, 启动发现: 串口没输出; 通过adb确认系统启动成功且PE8, PE9针脚功能配置正确(通过查看寄存器)
遂思考u-boot的bootargs是否没有配置正确, 发现./lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi里有bootargs踪迹, 遂修改:
编译, 烧录, 启动发现: 只有boot0程序(./lichee/brandy-2.0/spl/nboot/main/boot0_main.c)有输出, 且支持输入验证, 但kernel仍旧没有内容输出.
思考: 除了"uart"关键字还有"ttyS"关键字也指代串口, 所以在常用的配置目录下搜了一下
grep -rn "ttyS" ./device/config/chips/d1s ./device/config/chips/d1s/configs/default/env_burn.cfg:5:console=ttyS0,115200 ./device/config/chips/d1s/configs/default/env.cfg:5:console=ttyS0,115200 ./device/config/chips/d1s/configs/nezha/env.cfg:5:console=ttyS0,115200 Binary file ./device/config/chips/d1s/bin/u-boot-sun20iw1p1.bin matches
遂修改: ./device/config/chips/d1s/configs/nezha/env.cfg;
启动系统是有输出!!!完毕撒花:
-
回复: D1s使用V2.1版本 tiny SDK中的内核,设备连接w5500 spi wifi,spi通信失败
@yd_d1s 如果你能贴出spi-sunxi.c, spi-slave-protocol.h的代码差异, 真相就只有一个了
git diff spi-sunxi_old.c spi-sunxi.c git diff spi-slave-protocol_old.h spi-slave-protocol.h
-
回复: 编译下 D1s 的 Melis
在docker(ubuntu:20.04)中编译时, facebuildercmd出现段错误;
换成了一台Ubuntu 22.04.2 LTS(Linux tao 5.15.0-58 x86_64 GNU/Linux)物理机编译成功;
原因待查 -
[哪吒开发板]Tina Linux SPI主从通信验证实录
背景
- 主控: D1H
- 板卡: 两块哪吒开发板(以下简称为主机, 从机)
- 操作系统: Tina Linux 2.0
问题
验证D1H芯片SPI主从机通信.
硬件接线
主机SPI 从机SPI 19 SPI1_MOSI SPI1_MOSI 19 21 SPI1_MISO SPI1_MISO 21 23 SPI1_SCK SPI1_SCK 23 24 SPI1_CE SPI1_CE 24 SPI概述
SPI接口是一种高速的, 全双工, 同步的通信总线.
适配D1H芯片的Tina Linux的BSP-SDK(以下简称SDK)中已包含相关驱动文件: spi-sunxi.c.
它提供的了仅内核态下主从机的简易通信验证实验, 这或许是考虑到SPI通信速率比较高的特性.
验证操作SPI主机配置
menuconfig
在SDK执行完环境变量加载后, 执行:
/mnt/tina-d1-h$ make kernel_menuconfig
●开启Device Drivers->SPI support
●进入SPI support, 按图示开启:设备树
修改: ./device/config/chips/d1-h/configs/nezha/board.dts
需要根据手册和原理图确认好针脚功能:
SPI从机配置
menuconfig
(同SPI主机配置一致)
设备树
仅spi_slave_mode设为0, 其余项同SPI主机配置一致. spi_slave_mode = <0>;
SPI主机收发信息
按上述配置, 重新编译SDK, 打包, 烧录, 启动设备会出现:
root@TinaLinux# ls -l /dev/spidev1.0 crw------- 1 root root 153, 0 Jan 1 08:00 /dev/spidev1.0
然后将可执行的SPI测试程序(./lichee/linux-5.4/tools/spi/spidev_test)挪到设备上(adb push等)并赋予可执行权限:
# 主机以10MHz发送(即MOSI)发送16进制数据: 0x01 0x02 0x03 0x04 ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x02\x03\x04" # 主机以10MHz发送(即MOSI)发送ASCII字符串数据: "allwinner" ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "allwinner" spi mode: 0x0 bits per word: 8 max speed: 10000000 Hz (10000 KHz) TX | 61 6C 6C 77 69 6E 6E 65 72 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ |allwinner|
注意SPI是同步通信接口, 所以在发送的同时也会接收同样长度字节的数据.
下文将用到SPI主从通信的一种常见做法: 主机先发指令头, 然后再发指令体以获取从机应答.SPI从机收发信息
spi-sunxi.c中对SPI从机模(SLAVE_MODE)采取了简单的收发验证处理, 具体是创建一个内核线程执行int sunxi_spi_slave_task(void *data), 该函数又被设备中断所控制(当收到SPI数据时).
-
SPI从机接收到数据的主要流程:
sunxi_spi_slave_task() -> sunxi_spi_slave_handle_head(), 然后:
若指令头是写操作(0x01), 则执行:sunxi_spi_slave_cpu_rx_config(), 该函数仅是输出写入内容.
若指令投是读操作(0x03), 则执行:sunxi_spi_slave_cpu_tx_config(), 该函数仅是将收到的指令体的值+0x80, 然后发送(MISO)给主机. -
对于从机, spi-sunxi.c能验证SPI通信, 但没有可供用户层直接使用的方法.
用户层可验证的SPI从机收发方案
功能设计
从机安排一块32byte的内存缓存空间(简称"缓存空间")供主机通过指令进行读操作和写操作, 且从机能在用户层对该内存空间访问.
主要改动
- spi.c:
- 增加static struct class_attribute ye_spi_buf_attrs[], 以创建/sys/class/spi_slave目录下的spi_buf文件, 并提供实现了读/写缓存空间的方法.
- spi-sunxi.c:
- 使用ye_spi_slave_set_txdata()方法替换sunxi_spi_slave_set_txdata(), 以实现读操作.
- 修改sunxi_spi_slave_cpu_rx_config()方法, 以实现写操作.
改动详情请查看: d1h_spi_driver.diff
使用方法
写操作: 操作:0x01(写) 地址:0x00 0x00 0x00 指令体长度:0x09 ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x00\x00\x00\x09" && \ ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "allwinner" 读操作: 操作:0x03(读) 地址:0x00 0x00 0x00 指令体长度:0x09 ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x03\x00\x00\x00\x09" && \ ./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x00\x00\x00\x00\x00\x00\x00\x00\x00" 从机读取缓存空间: cat /sys/class/spi_slave/spi_buf 从机写入缓存空间: echo "Hello world" > /sys/class/spi_slave/spi_buf
-
回复: D1H开机启动项拉不起来
想开机配置网络和WiFi, 可以修改/etc/init.d/wpa_supplicant文件第48行左右....
参考:
Tina通过命令行连接WiFi
https://bbs.aw-ol.com/topic/396/share/1 -
回复: lvgl官方表盘项目指针和刻度没有对准,对我这种有严重强迫症的人来说看起来就心痛,不是难受,有能力的大佬修复一下这个bug?
官方例程lv_example_meter_3.c的钟表里指针采用的是贴图方式, 所以解决思路有两个:
- 针对屏幕分辨率, 优化贴图文件(img_hand.c)的样式
- 将贴图指针换成普通线段(粗细可调), 只要比的刻度粗一丁点或者把刻度覆盖掉就舒服多了.
贴出第二种方法变动:(基于lv_port_linux_frame_buffer.git)
--- a/examples/widgets/meter/lv_example_meter_3.c +++ b/examples/widgets/meter/lv_example_meter_3.c @@ -32,8 +32,9 @@ void lv_example_meter_3(void) LV_IMG_DECLARE(img_hand) /*Add a the hands from images*/ - lv_meter_indicator_t * indic_min = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5); - lv_meter_indicator_t * indic_hour = lv_meter_add_needle_img(meter, scale_min, &img_hand, 5, 5); + lv_meter_indicator_t * indic_min = lv_meter_add_needle_line(meter, scale_min, 5, lv_color_black(), 5); + lv_meter_indicator_t * indic_hour = lv_meter_add_needle_line(meter, scale_min, 3, lv_color_black(), 5);
效果:
结帖撒花✿✿ヽ(°▽°)ノ✿ -
嵌入式IPC适配USB无线网卡(RTL8188)
FH8852EV200调试RTL8188
作者本人转载, 链接:(http://t.csdn.cn/ulDBS)
坑点
- kernel认不出USB
- 加载ko出现各种段错误, 没有wlan0
- wpa_supplicant连不上wifi...
kernel认不出USB
kernel版本:FH885XV200_IPC_V1.1.0_20210716
检查menuconfig, 开启Device Drivers->USB support下的:!
关注Device Drivers->Network device support下: 貌似没什么值得关注的.
FH本身的ETH驱动在:-> Device Drivers -> Network device support (NETDEVICES [=y]) -> Ethernet driver support (ETHERNET [=y]) [*] Fullhan devices <*> FH 10/100 Ethernet driver [*] FH GMAC DMA arbitration scheme [ ] FH Independent Research Ephy
关注Networking support->Wireless:
注意sdk下kernel的Makefile很刚, make clean会直接删除目录重新解压
正常加载:USB网卡dmesg应显示:
加载ko出现各种段错误, 没有wlan0
FH本身自带了一些USB_WIFI驱动: FH885XV200_IPC_V1.1.0_20210716/board_support/kernel/wifi/usb_wifi/rtl8188FU_linux_v5.3.0.1_28034.20180525
确保Makefile的platform选择正确.
调整驱动日志输出等级:
根据dmesg输出的日志, 认真检查驱动代码. 在接近事故的地方加一些输出.深坑
请注意宏定义是否落实到最终代码!!!
diff --git a/os_dep/linux/wifi_regd.c b/os_dep/linux/wifi_regd.c index 73ccf28..be421cc 100644 --- a/os_dep/linux/wifi_regd.c +++ b/os_dep/linux/wifi_regd.c @@ -15,6 +15,10 @@ +// YE +#define CONFIG_IOCTL_CFG80211 +#define LINUX_VERSION_CODE 264577
修改后, 加载驱动没有出现段错误或其它异常(至少针对驱动v5.3.0.1)....
wpa_supplicant连不上wifi
FH自带了一套
能跑的工具wpa_supplicant v2.6, 对so有依赖:[Requesting program interpreter: /lib/ld-uClibc.so.0] Shared library: [librt.so.0] Shared library: [libpthread.so.0] Shared library: [libc.so.0]
从友商flash里提取一套wpa_supplicant v2.9, 所以没有继续纠结.....能用就行
[Requesting program interpreter: /lib/ld-uClibc.so.0] Shared library: [libm.so.0] Shared library: [libc.so.0]
运行方法:
./wpa_supplicant -Dnl80211 -iwlan0 -c/custom/wpa_supplicant.conf -B
wpa_supplicant.conf配置文件:
ctrl_interface=/var/run/wpa_supplicant update_config=1 network={ ssid="test_0" psk="8888888888" }
关于HS环境下编译wpa_supplicant-0.6.9注意事项
编译wpa_supplicant-0.6.9时需要依赖openssl-0.9.8r的头文件, 至于链接需要-lcrypto, 可以先找找SDK和工具链里有没有.
-
游戏引擎第一步:D1跑tinyGL
某天刷文章认识到了一位比肩Linus Torvalds的神人---QEMU, FFMPEG等神器作者法国程序猿Fabrice Bellard, 敬仰之余, 发现他手下有个OpenGL的开源子集实现tinyGL. 粗看代码感觉不算复杂
恰好手头上有个哪吒D1-H又没有GPU, 就把tinyGL移植了一下, 把牛当马使, 顺便摸摸D1-H性能的天花板.
先上效果图
默认分辨率大概47帧左右. (其实如果不搬RGB到fb可以上百帧)
打满官方MIPI屏分辨率(800x1280), 大概19帧左右.
运行该程序, D1-H终于有点发烧的感觉了, 也不算烫手.(估计还得再压个tinaplayer硬解4k)
修改要点
- 乱七八糟地魔改了一下Makefile, 里面的路径大家自己跟自家用的SDK对一下. ;
- 顺手牵羊几份SDK里的fbviewer的源码,
交叉编译
- 先make src目录下的源码, 得到库
- 再make RawDemos目录下可执行程序
github有个大伙优化的原始tinyGL原始版: https://github.com/C-Chads/tinygl
我魔改移植到D1的tinyGL: https://gitee.com/YJHmath/tinygl-d1
想拿程序去玩的:
Raw_demos.zip坑点
-
填-march=native或者-march=rv64imafdc会导致编译出来的程序无法运行, 解决方法: 不填, 让编译器默认.
-
因为用了lp64d/libm.a, 所以指定了-mabi=lp64d, 但也不清楚生没生效
参考
-
回复: pack 时 ERROR: unable to open file boot-resource.fex
@chunzhang
查询./scripts/pack_img.sh发现./tools/pack-bintools/src/fsbuild这个程序是32位的, 所以安装以下组件可解决问题:apt-get install lib32z1 lib32z1-dev
-
回复: 【V853开发板试用】**pack 时 ERROR: unable to open file boot-resource.fex 的解决办法**
@bango make只是再编译Tina一次, 你还是没有成功pack.
正确解决方法是:
【V853开发板试用】V853编译烧录疑难杂症汇总篇
https://bbs.aw-ol.com/topic/1740/share/3 -
回复: 【V853开发板试用】V853编译烧录疑难杂症汇总篇
官方文档提供的ubu20.04虚拟机(后称, 官方虚拟机)执行pack出现
fsbuild: No such file or directory
这是全志的闭源打包工具, 位于: tina-v853-open/tools/pack/pctools/linux/fsbuild200目录下, readelf -h可见
$ readelf -h fsbuild ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x8048870 Start of program headers: 52 (bytes into file) Start of section headers: 33856 (bytes into file) Flags: 0x0 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 8 Size of section headers: 40 (bytes) Number of section headers: 38 Section header string table index: 35
居然是个32位程序, 遂参考Ubuntu-64位系统运行32位程序的方法:
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386 sudo dpkg --add-architecture i386
Tina 终(
-
【V853开发板试用】V853编译烧录疑难杂症汇总篇
-
不要使用过去编译D1s的ubu14.04进行编译.
会出现找不到__NR_renameat2的值. -
官方文档提供的ubu20.04虚拟机在win11上运行可能存在问题, 输入密码登陆后无显示并卡死. win7实测正常.
-
找不到mkimage
UIMAGE arch/arm/boot/uImage "mkimage" command not found - U-Boot images will not be built make[1]: *** [arch/arm/boot/Makefile:93: arch/arm/boot/uImage] Error 1 make: *** [arch/arm/Makefile:331: uImage] Error 2
可以find . -name "mkimage" |xargs ls -lh,
然后选一个可以执行的,export PATH=$PWD/brandy/brandy-2.0/u-boot-2018/tools:$PATH
- 找不到/编不出mconf
find一下, 进入相应目录, make clean, 然后再重新make
-
-
回复: 【开源开发板】D1s-Nezha开发板全全开源上架(内含购买链接和全部软硬件资料)
@yuzukitsuru 在 【Yuzuki手作】D1s-Nezha开发板全全开源上架(内含购买链接和全部软硬件资料) 中说:
SDK百度云下载:链接:https://pan.baidu.com/s/1MF8HIJHuEG71NxOY1riBZw 提取码:awol
下载拉到 官方文档提供的 虚拟机 中, 4核编译30min成功.
正在烧录.... -
回复: ubuntu21.04编译d1源码出错
我换了好多几个环境拷贝 整个sdk 都能重现了这个问题。
尝试make -d发现连cp这样基础的方法都出现找不到LIBC 2.XX等问题,这让我意识到这不完全是与操作系统相关的问题。
搜索cp发现out/host目录下有着一套独立的用于编译的系统环境。
然后果断cd out mv host ../.. rm -rf ./*
正在编译中..., 没有再报错了。
-
【XR806官方开发板入门】openHarmony编译与烧录
【XR806官方开发板入门】openHarmony编译与烧录
非常感谢AW陈老板赠与XR806开发板~~~
期望未来线下面基活动不会太晚.首先画重点:
【严重警告】不要用全志客户服务平台Freertos v1.2版本编出来的固件烧到XR806开源鸿蒙开发板
由于我鸽子特性, 所以前一段时间我卡在了openharmony(简称OH)开发路线上, 所以避开了官方RTOS这坑.OH开发路线我断断续续地摸索了2天
- 一是文档教程分散且有多个版本(见 参考文献);
- 二是估计OH官方库跟XR806的适配出现了一些分歧, 两者没有合并在一起.
平台
原生Ubuntu 20.04
资源
先建个文件夹, 边下载边往下看
mkdir xradio && cd ~/xradio
gn
需要下载gn-linux-x86-1717.tar.gz工具. 链接忘了
放到~/gn目录下, 并加入环境变量
工具链
Linux: gcc-arm-none-eabi-10-2020-q4-major
下载解压, 加不加到PATH不要紧. 因为OH依靠ninja工具构建. 只要将工具链路径(gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/bin)加入
特定库
devboard_device_allwinner_xr806
git@gitee.com:moldy-potato-chips/devboard_device_allwinner_xr806.git
devboard_vendor_allwinner_xr806
git@gitee.com:moldy-potato-chips/devboard_vendor_allwinner_xr806.git
以上两个库是早期从OH库特定分支fork下来的. 个人认为可能是最新的OH官方库与xr806适配方式存在一些分歧, 所以导致官方教程的里repo sync时无法同步到特定目录(库).
下载完之后xradio目录应该为:
xradio ├── devboard_device_allwinner_xr806 ├── devboard_vendor_allwinner_xr806 └── gcc-arm-none-eabi-10-2020-q4-major
OH
先来看看官方教程, 然而并不能正常repo sync(21/03/06之前)
mkdir openharmony cd openharmony repo init -u ssh://git@gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml repo sync -c repo forall -c 'git lfs pull' #下载部分大容量二进制文件
问题出现在
-m devboard_xr806.xml
所以直接取得OpenHarmony_1.0.1_release分支OH仓即可:
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify repo sync -c repo forall -c 'git lfs pull'
注意xr806仅适配特定分支的OH系统.
整合目录★★★
以下操作是为了弥补该分支OH仓的一些差异.
估计是OH官方仓作了一些修改没法向前兼容XR806的适配.# 若~/openharmony/device/xradio目录已存在, 则可备份一下. # 复制device库 cp -rfa ~/xradio/devboard_device_allwinner_xr806 ~/openharmony/device/xradio # 复制vender库 cp -rfa ~/xradio/devboard_vendor_allwinner_xr806 ~/openharmony/vendor/xradio
配置工具链
cd ~/openharmony
修改:
device/board/allwinner/xradio
device/xradio/xr806/liteos_m/config.gni +37# Compiler prefix. board_toolchain_prefix = "~/xradio/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-"
修改:
device/xradio/xr806/xr_skylark/gcc.mk
CC_DIR := ~/xradio/gcc-arm-none-eabi-10-2020-q4-major/bin
编译注意事项
hb工具选择兼容XR806的版本
hb是构件OHOS的python工具. 它位于openharmony/build/lite/hb.
hb最新版本不兼容编译XR806 SDK, 所以必须使用b765e35分支的hb工具, 即对应OH仓OpenHarmony_1.0.1_release分支的版本.
git reset --hard b765e35 # 在openharmony目录下执行安装才会替换hb python3 -m pip install --user build/lite
编译SDK
编译前要包含一下要编译的程序, 比如
~/openharmony/device/xradio/xr806/ohosdemo/hello_demo
需要修改一些Build.gn...
详细见官方教程和OH仓吧...
还有一些生成文件需要注意:openharmony/device/xradio/xr806/liteos_m/SDKconfig.gni
编译
hb set 然后按一下回车出现:
!imga
选择wifi_skylark@xradio选项.
然后hb build -f -c gcc
见success即可.
烧录
记得按官方教程打上 配置里的勾勾.
参考文献
[2] 系统下载与编译
-
回复: 哪吒Tina Linux启用Telnetd
telnetd需要开机运行在后台. 开机启动请参考
Tina通过命令行连接WiFi
https://bbs.aw-ol.com/topic/396/share/1 -
回复: 哪吒Tina Linux启用Telnetd
需要修改/etc/passwd
root:ehbejoEKr/zwQ:0:0::/root:/bin/sh
这样telnet到哪吒的账户密码为:
root
19841219
(不是我生日 ) -
回复: 【开源直播】手把手教你用全志XR32芯片DIY一个自己的开发板(一:电路与PCB绘制)
@randolph OV2640我之前在STM32用while的方法(阻塞)读图片, 粗暴但不科学, 有没有更好的建议?
-
回复: 【XR806开发板试用】棋子分拣机
舵机的输入信号口我是用806上的接口直接驱动的,并没有再拉高
只要舵机和xr806共地即可. 你可以理解为处于特定角度的舵机是筛子, 你指定特定角度的PWM信号是沙子; 如果沙子能漏过筛子, 舵机就转到特定角度, 相当于筛子的孔变细了.
-
回复: 哪吒D1开发板 LVGL7 源码下载(带git仓库)
@whycan 要在官方LCD跑这个LVGL示例是不是:
- 修改board.dts让输出指向LCD
- 把该示例的程序push进去即可跑起来?
-
回复: 小白在线求大佬们教学
@heinhe 哪吒Tina Linux启用Telnetd
https://bbs.aw-ol.com/topic/510/share/1 -
回复: 超4K分辨率(2888x2888)的视频流还可以通过H265硬解吗?
补充一下样图:
关于tplayerdemo输出:
超4K会报:显示画面会有点花.
fbm.c FbmReturnPicture:1002: invalid frame status, a picture being returned, but bUsedByRender=0, bInValidPictureQueue=1, bAlreadyDisplayed=0.恰好4K:正常
fbm.c FbmReturnPicture:1002: invalid frame status, a picture being returned, but bUsedByRender=0, bInValidPictureQueue=0, bAlreadyDisplayed=0. -
超4K分辨率(2888x2888)的视频流还可以通过H265硬解吗?
硬要用tplayerdemo播放2888x2888是可以运行, 但是画面(从上之下)的下半部分会出现绿油油马赛克失真.
同样的, 通过decodertest取YV12同样发现上述的失真现象.想请教:
- 这是硬解的上限了吗?
- 只取样, 不对帧率作要求的话, 硬解还能走通吗?
-
回复: 毫无PS痕迹的芒果派-哪吒MQ(也叫小麻雀)定妆照,一体化(Almost All-in-One)设计
@mangogeek 碰上冬天这种可怕的有静电季节,赶紧把外壳也做了吧。
-
回复: 求教:关于Tina linux SDK代码架构问题
@wadedeng
你翻翻我的一些帖子,移植应用或者库的。
你完全可以照抄我交叉编译cmake的写法。
https://gitee.com/YJHmath/image-transmission-d1-tina/blob/master/CMakeLists.txt -
回复: 求教:关于Tina linux SDK代码架构问题
@wadedeng busybox就是一个模仿linux常用程序的程序,好度集成了呗。
这方面应该看看韦东山老师的linux驱动入门课。(不用钱) -
回复: 求教:关于Tina linux SDK代码架构问题
@wadedeng 写/魔改 uboot kernel busybox 用SI.
写应用,有cmake加有提示报错就好 -
回复: 求教:关于Tina linux SDK代码架构问题
@wadedeng 善用 find . -name "*.h/c" | xargs grep -irn "(包含的字符串)"
找到相应文件的路径,再酌情打开相应模块目录。
SI就应该只打开你要看和写的部分文件。它还有个引用的功能,只需要指向编译器的头文件或者tina头文件路径即可,切勿添加这些文件进项目。
最大的程序无非uboot, kernel, busybox等,都会有独立配置,不妨make menuconfig试试。至少对应3个SI项目。比如你只要看fbviewer这个显示图像的函数,你只需要打开对应方法目录添加相应源文件看实现即可。
记住SI只是看和改大型项目代码的,好看c结构体模样等等。
写/创造代码的话,最好用cmake+qtcreator/clion.