@kelsey 写错了已修改
YterAA 发布的帖子
-
回复: T113的spi 不能使用compatible=“spidev”?
参考 《D1-H_Linux_SPI_开发指南.pdf》
使用spidev并不需要专门设置compatible = "spidev";。而设置spidev会导致 spidev listed directly in DT 错误。这里使用的虚拟设备可以通过compatible = "rohm,dh2228fv"; 这样的 compatible 设备绕过检测
可用的spidev如下:
WARN参考spidev源码:
-
解决 T113 修改 UART3 后 Uboot 有输出但是 Kernel 无法启动
请按照如下步骤依次验证是否配置正确
使用UART3,需要从UART0改为UART3(PB6,PB7)
- 修改
sys_config.fex
(BOOT0与Uboot的串口)
sys_config.fex
的路径是device/config/chips/t113/configs/evb1/sys_config.fex
中的uart_debug_port
修改前:
[uart_para] uart_debug_port = 0 uart_debug_tx = port:PF02<3><1><default><default> uart_debug_rx = port:PF04<3><1><default><default>
修改后
[uart_para] uart_debug_port = 0 uart_debug_tx = port:PB06<7><1><default><default> uart_debug_rx = port:PB07<7><1><default><default>
- 修改设备树(Linux使用的串口输出)
路径:
device/config/chips/t113/configs/evb1/board.dts
修改前
uart3_pins_a: uart3_pins@0 { pins = "PC6", "PC7"; function = "uart0"; drive-strength = <10>; allwinner,muxsel = <4>; bias-pull-up; }; uart3_pins_b: uart3_pins@1 { pins = "PC6", "PC7"; function = "gpio_in"; }; &uart0 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart0_pins_a>; pinctrl-1 = <&uart0_pins_b>; status = "okay"; }; &uart3 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart3_pins_a>; pinctrl-1 = <&uart3_pins_b>; status = "disabled"; };
修改后
uart3_pins_a: uart3_pins@0 { pins = "PB6", "PB7"; function = "uart0"; drive-strength = <10>; allwinner,muxsel = <7>; bias-pull-up; }; uart3_pins_b: uart3_pins@1 { pins = "PB6", "PB7"; function = "gpio_in"; }; &uart0 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart0_pins_a>; pinctrl-1 = <&uart0_pins_b>; status = "disabled"; # 关闭UART0 }; &uart3 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&uart3_pins_a>; pinctrl-1 = <&uart3_pins_b>; status = "okay"; # 开启UART3 };
- 修改UBOOT CONSOLE INDEX
路径:
brandy/brandy-2.0/u-boot-2018/configs/sun8iw20p1_defconfig
增加下列内容CONFIG_SPECIFY_CONSOLE_INDEX=y CONFIG_CONS_INDEX=4 # UART 3+1 = 4
- 修改启动bootargs
路径:
device/config/chips/t113/configs/evb1/env.cfg
修改前
earlyprintk=sunxi-uart,0x02500000 initcall_debug=0 console=ttyS0,115200
修改后
earlyprintk=sunxi-uart,0x02500000
需要修改为 UART3 的地址,查阅手册可知为0x02500C00
earlyprintk=sunxi-uart,0x02500C00 initcall_debug=0 console=ttyS3,115200
- 修改 DEBUG_LL的地址
make kernel_menuconfig
找到 Kernel low-level debugging functions,修改寄存器地址
- 修改
-
回复: 全志芯片Tina Linux 修改 UART 引脚、UART端口
注意 ARM 平台还需要设置Kernel,如下:
make kernel_menuconfig
找到 Kernel low-level debugging functions,修改寄存器地址RISC-V 不需要此操作
(之前忘记说了,现在补上
-
回复: Error: "distro_bootcmd" not defined
GUID Partition Table Header signature is wrong: 0x6F627464 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid GPT *** ERROR: attempting read past flash size *** ERROR: Can't read GPT header *** part_get_info_efi: *** ERROR: Invalid Backup GPT *** [00.265]Loading Environment from SUNXI_FLASH... GUID Partition Table Header signature is wrong: 0x6F627464 != 0x5452415020494645 part_get_info_efi: *** ERROR: Invalid GPT *** ERROR: attempting read past flash size *** ERROR: Can't read GPT header *** part_get_info_efi: *** ERROR: Invalid Backup GPT *** *** Warning - no device, using default environment
系统分区损坏了。无法读取到fs里的文件。可以参考下这个是怎么写的 https://www.aw-ol.com/downloads/resources/72
-
回复: Error: "distro_bootcmd" not defined
@huangjun-zopudt 看一下 config/chip/d1-h/nezha/env.cfg有没有
-
回复: 全志V853 NPU yolov3转化模型时量化未使用全部data图片
- 量化不仅是对参数量化,也会对输入输出的数据量化。模型没有输入数据,就不知道输入输出的数据范围。 不一定要把所有训练数据全部加入量化。太多了,量化就太慢了。通常我们选择几百张能够代表所 有场景的输入数据就可以了。量化数据放入多一些,量化后精度可能会好一些。nbg 包含权重以及 量化信息,板子上面运行 NBG 文件时,只需要准备输入数据。不需要量化文件。 量化过程中的--batch-size 表示一次处理的数据的个数,对 YOLOV3 来说,这个数据就是 dataset.txt 中指定的图片,当 --batch-size 和--iterations 联合起来一起用,表示以--batch-size 个为单位处理单位的数据,处理 --iterations 次,并且是按照 dataset.txt 文件列表循环处理的。简言之,batch size 就是 NCHW 中的 N.
- 这个log表示此时使用的是CPU而不是GPU,是Tensorflow这个库的一个警告,无视即可
- 实际测试过,将NPU主频提高400MHz并没有明显的提升,说明提高NPU主频并没有什么意义。卡顿可以通过减少数据量,优化视频通路来解决。例如使用320分辨率的图片
-
回复: A133 Android USB摄像头无法使用,请问是什么问题?
insmod $MODULES_DIR/sunxi_usb_udc.ko insmod $MODULES_DIR/sunxi_usbc.ko mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 echo "0x18d1" > /sys/kernel/config/usb_gadget/g1/idVendor echo "0x0002" > /sys/kernel/config/usb_gadget/g1/idProduct mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "20080411" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber echo "Android" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwDefaultFrameInterval echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1 echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.usb0 mkdir /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ adbd > /dev/null & sleep 2 udc=`ls /sys/class/udc` isudc=0 echo $udc > /sys/kernel/config/usb_gadget/g1/UDC
-
回复: 全志V853 NPU 导入模型修改为 yuv输入,导出NBG文件报错
我这边测试是没有问题的,可能是软件的bug,dataset.txt里放两张图片试试看行不行。因为一般转换模型不会只放一张图片的,可能没考虑过放一张图片的情况。这里的输出nbg是靠前面的权重和模型文件打包得到的,与最后一步导出无关
另外读取nbg文件dump出来的也是包括预处理层的
-
回复: 全志V853 NPU 导入模型修改为 yuv输入,导出NBG文件报错
@rain_tk 可以先跳过,检查下在ovxilb文件夹里能不能找到nbg模型
仿真主要变化总结如下:
- dog_416x416.jpg 不需要了。
- 添加了 Y.bin 和 UV.bin 替换 dog_416x416.jpg 作为输入参数数据。
- 仿真产生了 Input_0.dat,input_1.dat,而 YOLOV3 RGB 输入模式只生成有 input_0.dat.
- UV.bin==input_1.dat, Y.bin==input_0.dat
-
回复: 全志V853 NPU 导入模型修改为 yuv输入,导出NBG文件报错
@rain_tk Y和UV的这两个bin是后面仿真,预推理使用的,dataset.txt里还是原来的rgb图片。这里转换的模型本质上还是rgb的,预处理只是把yuv转换rgb,与模型无关
前处理也只是把 CPU 需要做的转换交给NPU的PPU处理
-
回复: 全志V853 NPU 导入模型修改为 yuv输入,导出NBG文件报错
YML 指定的 IMAGE_NV12 输入模式下,YUV 输入数据的方式是 Y,UV 分成两个文件送给验证程序,所以第一步,我们需要将 dog_416x416 图片转换为 YUV420 格式, 再拆分成两个文件
-
转换
我们使用 ffmpeg 将一张 416*416 的图片转换为 YUV ffmpeg -i dog_416x416.jpg -pix_fmt nv12 image_416x416.nv12.yuv
-
将 Y 和 UV 平面分开,并分成两个文件按存储。 Y 和 UV 分 bin NV12 格式的大小,按理论计算,应该是 4164161.5=259584 字节。所以,Y 分量的大小应该为 4164161 = 173056, UV 分量大小为 86528。
分 Bin 我们使用 Linux 下的 dd 工具:
dd if=image_416x416.nv12.yuv of=Y.bin bs=1 count=173056 dd if=image_416x416.nv12.yuv of=UV.bin skip=173056 bs=1
仿真需要的数据也是要事先处理好的 Y.bin,UV.bin 作为参数,工具不帮忙给做
-
-
回复: 全志D1 原理图问题
UD1 是双晶 DDR3 的接法,焊接 单晶 DDR3 的时候那两个脚是NC的
而部分型号的 DDR3 是双晶的,也就是一颗DRAM芯片内有 2 片DRAM晶圆。比如H5TC8G63CMR的Dual Die Package
针对这样的 DDR3 颗粒的时候,就需要像 UD1 那样接 DRAM 芯片,支持双晶颗粒。
而 UD2 则是普通的单晶接法。只能接单晶颗粒,接双晶的只能启用其中一颗晶圆。
也就是说,D1-H 芯片要么接一片双晶 DDR3 芯片,要么接2片单晶 DDR3 芯片。 不支持4贴,8贴,16贴 DDR3 颗粒
另外这里的双晶也被称作 Dual Die Package、Dual Rank Package。不同的内存颗粒厂家叫法不同
-
回复: D1H DDR控制器支持写入均衡(Write leveling)吗
只支持T扩,fly-by没那么多控制线。而且D1-H最大支持2G内存,T扩2片DDR3就满了
-
回复: d1的千兆mac是不是跑不满千兆的
D1 建立服务器,R528测速:
root@TinaLinux:/# iperf3 -c 192.168.0.3 Connecting to host 192.168.0.3, port 5201 [ 4] local 192.168.0.2 port 54906 connected to 192.168.0.3 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 53.2 MBytes 446 Mbits/sec 0 235 KBytes [ 4] 1.00-2.00 sec 47.6 MBytes 400 Mbits/sec 3 96.2 KBytes [ 4] 2.00-3.00 sec 42.6 MBytes 357 Mbits/sec 1 132 KBytes [ 4] 3.00-4.00 sec 43.6 MBytes 366 Mbits/sec 1 133 KBytes [ 4] 4.00-5.00 sec 43.9 MBytes 368 Mbits/sec 0 133 KBytes [ 4] 5.00-6.00 sec 43.3 MBytes 363 Mbits/sec 1 120 KBytes [ 4] 6.00-7.00 sec 43.4 MBytes 364 Mbits/sec 1 134 KBytes [ 4] 7.00-8.00 sec 43.9 MBytes 368 Mbits/sec 2 69.3 KBytes [ 4] 8.00-9.00 sec 42.6 MBytes 358 Mbits/sec 0 133 KBytes [ 4] 9.00-10.00 sec 44.1 MBytes 370 Mbits/sec 0 133 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 448 MBytes 376 Mbits/sec 9 sender [ 4] 0.00-10.00 sec 448 MBytes 375 Mbits/sec receiver iperf Done.
R528 建立服务器,D1 测速
root@TinaLinux:/# iperf3 -c 192.168.0.2 Connecting to host 192.168.0.2, port 5201 [ 4] local 192.168.0.3 port 44640 connected to 192.168.0.2 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 14.8 MBytes 124 Mbits/sec 260 12.7 KBytes [ 4] 1.00-2.00 sec 23.2 MBytes 195 Mbits/sec 393 18.4 KBytes [ 4] 2.00-3.00 sec 22.5 MBytes 189 Mbits/sec 458 12.7 KBytes [ 4] 3.00-4.00 sec 22.8 MBytes 191 Mbits/sec 407 18.4 KBytes [ 4] 4.00-5.00 sec 23.1 MBytes 194 Mbits/sec 422 15.6 KBytes [ 4] 5.00-6.00 sec 22.3 MBytes 187 Mbits/sec 414 14.1 KBytes [ 4] 6.00-7.00 sec 21.3 MBytes 179 Mbits/sec 373 15.6 KBytes [ 4] 7.00-8.00 sec 22.9 MBytes 192 Mbits/sec 413 9.90 KBytes [ 4] 8.00-9.00 sec 24.7 MBytes 207 Mbits/sec 436 19.8 KBytes [ 4] 9.00-10.00 sec 23.6 MBytes 198 Mbits/sec 442 14.1 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 221 MBytes 186 Mbits/sec 4018 sender [ 4] 0.00-10.00 sec 221 MBytes 185 Mbits/sec receiver
-
回复: d1的千兆mac是不是跑不满千兆的
root@TinaLinux:/# iperf3 -c 192.168.0.2 -p 5201 Connecting to host 192.168.0.2, port 5201 [ 4] local 192.168.0.3 port 35484 connected to 192.168.0.2 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 42.0 MBytes 352 Mbits/sec 21 76.4 KBytes [ 4] 1.00-2.00 sec 45.4 MBytes 381 Mbits/sec 13 83.4 KBytes [ 4] 2.00-3.00 sec 43.1 MBytes 362 Mbits/sec 16 93.3 KBytes [ 4] 3.00-4.00 sec 40.3 MBytes 338 Mbits/sec 22 209 KBytes [ 4] 4.00-5.00 sec 45.7 MBytes 384 Mbits/sec 13 116 KBytes [ 4] 5.00-6.00 sec 45.5 MBytes 382 Mbits/sec 12 143 KBytes [ 4] 6.00-7.00 sec 46.2 MBytes 388 Mbits/sec 13 175 KBytes [ 4] 7.00-8.00 sec 45.7 MBytes 383 Mbits/sec 15 167 KBytes [ 4] 8.00-9.00 sec 45.1 MBytes 379 Mbits/sec 16 59.4 KBytes [ 4] 9.00-10.00 sec 44.7 MBytes 375 Mbits/sec 10 160 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 444 MBytes 372 Mbits/sec 151 sender [ 4] 0.00-10.00 sec 443 MBytes 372 Mbits/sec receiver
初步测了一下,确实跑不满
-
Tina System Init 流程分析
init 进程是内核启动的第一个用户进程,它根据配置文件决定启动那些程序,比如执行某些脚本、启动 shell、运行用户指定的程序等。init 进程是后续所有进程的发起者,比如init进程启动 /bin/sh 程序后,才能在控制台输入各种命令。
init进程的执行程序通常是在/sbin/init,上面讲述的 init 进程的作用只不过是 /sbin/init 这个程序的功能。我们完全可以编写自己的 /sbin/init 程序,或者传入命令行参数“init=xxxx”指定某个程序作为init进程运行。
tina系统中目前支持两种init程序:procd init 和 busybox init。下面我们来简单分析下kernel是如何调用第一个用户进程。
如上图所示,内核启动的第一个c语言入口函数为 start_kernel(), 在函数中:会设置与体系结构相关的环境变量,初始化控制台,以及挂载根文件系统,最后启动 init 进程。
其中的 run_init_process 函数使用它的参数所指定的程序来创建第一个用户进程。
(1)如果 ramdisk_execute_command 变量指定了要运行的程序,则启动它。
ramdisk_execute_command 的取值分三种情况,
1)如果命令行参数指定了“rdinit=xxx”,则ramdisk_execute_command等于这个参数指定的程序
2)否则,如果/init程序存在,ramdisk_execute_command就等于“/init”。
3)否则,ramdisk__execute_command为空
(2)如果execute_command变量指定了要运行的程序,启动它。
如果命令行参数指定了"init=...",则execute_command等于这个参数指定的程序,否则为空
(3)如果 ramdisk_execute_command 和 execute_command 参数都没有指定,则依次执行 ”/sbin/init、/etc/init、/bin/init、/bin/sh“在tina系统中,我们可以通过去修改env.cfg文件 ”rdinit=xxx“ 或 ”init=xxx“ 参数来指定启动的第一个用户进程
example:
tina/target/allwinner/azalea-m2ultra/configs下,修改env-3.10.cfg(如果没有这个文件,则到tina/target/allwinner/generic/configs/拷贝一份env-3.10.cfg到tina/target/allwinner/azalea-m2ultra/configs/),修改文件中的”init=‘指定的应用进程’ “即可 -
回复: WSL-ubuntu20.04 编译d1-h_nezha_tina 出错:satisfy_dependencies_for: Cannot satisfy the following dependencies for directfb-examples
前面的collect的error不是重点,那个只是因为平台差异不能使用的警告,实际的错误是no module name argprase,请使用python2.7以上版本
-
回复: 怎么在视频上显示UI?
@jhj001 f133好像没有mpp架构,可以通过双图层支持。具体可以参考lv_monitor的实现
双图层是tocn管理,位于disp节点。输出还是同一个fb
-
回复: Tina procd-init 与 busybox-init 切换
(1)如果ramdisk_execute_command变量指定了要运行的程序,则启动它。 ramdisk_execute_command的取值分三种情况, 1)如果命令行参数指定了“rdinit=xxx”,则ramdisk_execute_command等于这个参数指定的程序 2)否则,如果/init程序存在,ramdisk_execute_command就等于“/init”。 3)否则,ramdisk__execute_command为空 (2)如果execute_command变量指定了要运行的程序,启动它。 如果命令行参数指定了"init=...",则execute_command等于这个参数指定的程序,否则为空 (3)如果ramdisk_execute_command和execute_command参数都没有指定,则依次执行”/sbin/init、/etc/init、/bin/init、/bin/sh“ 在tina系统中,我们可以通过去修改env.cfg文件”rdinit=xxx“或”init=xxx“参数来指定启动的第一个用户进程
-
回复: Tina Linux 存储介质切换:eMMC,SPI NAND,SPI NOR,SD Card,SD NAND
Tina 3.5 一般支持nor, nand, mmc 三种介质。
更具体的,nand分为并口nand和spinand,mmc分emmc和sd卡
主要需要区分的是nor和其他介质,因为需要打包的部分有所不同。
即,emmc和nand,sd卡一般可共用一份固件,而nor则需使用另一份固件
sys_config配置
在sys_config中有一个配置项,storage_type,取值及含义如下
;---------------------------------------------------------------------------------- ; storage_type 0:nand 1:sd 2:emmc 3:spinor 4:emmc3 5:spinand 6:sd1 ;---------------------------------------------------------------------------------- [target] storage_type = xxx
对于nor的方案,必须配置为
storage_type = 3
对于其他介质,storage_type则不能配置为3
spinand切换为spinor
sys_config 设置介质为nor
[target] storage_type = 3
配置所用nor的大小
[norflash] size = 16
内核配置
make kernel_menuconfig ---> Device Drivers ---> < >Block devices (取消选中) Device Drivers ---> <*>Memory Technology Device (MTD) support <*>OpenFirmware partitioning information support <*>SUNXI partitioning support <*> Caching block device access to MTD devices <*> SPI-NOR device support (对于linux4.9,先选这个,下面的选项才出现) Self-contained MTD device drivers ---> <*> Support most SPI Flash chips (AT26DF, M25P, W25X, ...) File systems ---> < > The Extended 4 (ext4) filesystem(取消选中) File systems ---> [*] Miscellaneous filesystems ---> <*> Journalling Flash File System v2 (JFFS2) support(选中) [*] Enable the block layer ---> [ ] Support for large (2TB+) block devices and files(取消选中)
menuconfig配置
make menuconfig ---> Utilities ---> <*> mtd-utils (选择) ---> <*> mtd-utils-mkfs.jffs2 make menuconfig ---> Utilities ---> Filesystem ---> < > e2fsprogs(取消选择)
spinor切换为spinand
sys_config 设置介质为spinand
[target] storage_type = 5
内核配置
make kernel_menuconfig ---> Device Drivers ---> [*]Block devices ---> <*> sunxi nand flash driver Device Drivers ---> < >Memory Technology Device (MTD) support(取消选择) [*] Enable the block layer ---> [*] Support for large (2TB+) block devices and files File systems ---> <*> The Extended 4 (ext4) filesystem
menuconfig 配置
make menuconfig ---> Utilities ---> < > mtd-utils (取消选择) Filesystem ---> <*> e2fsprogs
分区表配置
注意点对于nand,rootfs_data分区,使用ext4格式。分配太小的话可能会创建失败。
FAQ
使用mkfs.ext4等工具的时候出现
/usr/sbin/fsck.ext4 -y /dev/by-name/rootfs_data Error loading shared library /home/wuguanling/workspace/project/v316-sdv-tina/out/v316-sdv/staging_dir/target/rootfs/lib/libc.so: No such file or directory (needed by /usr/lib/libext2fs.so.2)
关闭以下选项:
make menuconfig | --- Global build settings | --- []strip unnecessary functions for libraries
-
Tina procd-init 与 busybox-init 切换
tina 默认为 procd-init。
Procd INIT
make menuconfig 进行配置
-
System init 选择procd-init
-
以下一步步选中
Base system ---> <*>block-mount <*>busybox................................ Core utilities for embedded Linux ---> Init Utilities ---> [ ] init 此处不选
- env.cfg修改
init=/sbin/init
Busybox INIT
make menuconfig 进行配置
-
System init 选择busy-init
-
以下一步步选中
Base system ---> <*>busybox................................ Core utilities for embedded Linux ---> Init Utilities ---> [* ] init 此处选上
- env.cfg 修改
init=/init rdinit=/rdinit
-
-
回复: [部分已解决] v853 sdk 编译失败:undefined reference to `sunxi_challenge`
buildroot不支持 ubuntu:22.04,只有 openwrt支持,buildroot最高支持ubuntu18.04
-
回复: H618?Android 12 电视盒?
H616 有三个版本,A、B、C,C版本叫 H618 了
区分版本的方法看左下方那一行,倒数第二个字母就是版本(其他芯片也适用)
-
回复: 请教各位同学,Tina-SDK 如何在uboot下单独更新kernel 设备树文件?
kernel与kernel-dtb存放在不同的独立分区 uboot启动后,uboot使用uboot-dtb进行初始化,以及设置一些uboot的功能 | V uboot在初始化完flash后从kernel-dtb存放的分区中获取kernel-dtb,用kernel-dtb替换掉正在使用的uboot-dtb | V 更新一些dram以及flash介质参数到kernel-dtb,把kernel-dtb传递给kernel并启动kernel 1.修改uboot目录下对应方案的配置文件 修改configs/sunxxxp1_defconfig文件如下 CONFIG_OF_BOARD=y #CONFIG_OF_SEPARATE is not set 修改以及添加: #CONFIG_OF_BOARD is not set CONFIG_OF_SEPARATE=y ------------> uboot开启独立dtb功能,uboot启动后将使用uboot-dtb(使能哪份dtb请参考Tina独立dtb逻辑介绍中的相同点) CONFIG_SUNXI_REPLACE_FDT_FROM_PARTITION=y -------------->uboot开启从独立分区中读取kernel-dtb的功能 2.在分区表中添加一个分区,并确保下载到分区的dtb数据正确 例如修改sys_partition.fex文件如下: [partition] name = dtb ---------->分区名可以自己设置 size = 512 downloadfile = "sunxi.fex" ---------->分区存放的文件,dtb数据 user_type = 0x8000 3.如下修改uboot的env环境变量文件 添加如下环境变量 replace_fdt=dtb:raw / replace_fdt=dtb:fat:fdtfilename 说明: 在uboot启动的过程中会读取这个env变量,然后进行dtb数据的替换 (1).replace_fdt : 固定字符串,uboot靠它来进行识别,不可修改 (2).dtb : 分区名,从哪个分区获取dtb数据,与上面点2的分区名对应,可以修改 (3).raw / fat : 分区类型,分区是裸分区(raw),还是fat文件系统的分区(fat) (4).fdtfilename : fat文件系统才需要,dtb数据的文件名,如果是裸分区(raw)不需要设置
-
回复: 我有很多很多问号【DH-H Tina】
1.在Tina SDK make kernel_menuconfig 点击save后保存应用均为自动操作,save了就可以了
2.生成ko文件makefile里吧obj-y改为obj-m。
3.驱动编写教程参考:https://v853.docs.aw-ol.com/soft/dev_gpio/#led
4.APP不能调用kernel层的操作,需要Port一些操作,可以是用户层接口,也可以是VFS
5.设备树相关:https://v853.docs.aw-ol.com/soft/dev_gpio/#pinctrl
6.iio接口的驱动应该是其他平台使用的,哪吒板子没有IIO接口针对哪吒板子,PerfXLab 提供了多个demo可供使用,可以参照:https://github.com/rvboards/d1_demo
-
回复: D1-H 有哪些CSR 地址是怎么分布的?
MXSTATUS 是机器模式扩展状态寄存器
地址定义:
其设置方法如下:
(0:1) CACHE_SEL=2’b11时,选中指令和数据高速缓存
(4) INV=1时高速缓存进行无效化
(16) BHT_INV=1时分支历史表内的数据进行无效化
(17) TB_INV=1时分支目标缓冲器内的数据进行无效化
csr_write(CSR_MCOR, 0x70013);(0) IE=1时Icache打开
(1) DE=1时Dcache打开
(2) WA=1时数据高速缓存为write allocate模式 (c906不支持)
(3) WB=1时数据高速缓存为写回模式 (c906固定为1)
(4) RS=1时返回栈开启
(5) BPE=1时预测跳转开启
(6) BTB=1时分支目标预测开启
(8) WBR=1时支持写突发传输写 (c906固定为1)
(12) L0BTB=1时第一级分支目标预测开启
csr_write(CSR_MHCR, 0x11ff);(15) MM为1时支持非对齐访问,硬件处理非对齐访问
(16) UCME为1时,用户模式可以执行扩展的cache操作指令
(17) CLINTEE为1时,CLINT发起的超级用户软件中断和计时器中断可以被响应
(21) MAEE为1时MMU的pte中扩展地址属性位,用户可以配置页面的地址属性
(22) THEADISAEE为1时可以使用C906扩展指令集
csr_set(CSR_MXSTATUS, 0x638000);(2) DPLD=1,dcache预取开启
(3,4,5,6,7) AMR=1,时,在出现连续3条缓存行的存储操作时后续连续地址的存储操作不再写入L1Cache
(8) IPLD=1ICACHE预取开启
(9) LPE=1循环加速开启
(13,14) DPLD为2时,预取8条缓存行
csr_write(CSR_MHINT, 0x16e30c);这些C906核心的寄存器资料均位于《Xuantie_C906_R1S0_User_Manual.pdf》 文档中,可以前往平头哥开源芯片平台下载。
-
回复: F1C200S官方下载melis2.0的 1.6 boot0不能正常使用
[BOOT0] BOOT0 is starting DBG: bootinfo error1
考虑可能是因为sdk更新libchipid存在更新。可以尝试替换老版本的boot0文件打包
-
回复: 请教boot mode选择问题?
@zhongtao1701
SID 是储存器存放芯片的一些配置选项,包括BOOT_MODE,MAC等等。现在XFEL可以读出SID的配置值即是默认值。BOOT 顺序可以通过两种方法指定,第一种是烧录芯片eFuse,使用写号工具DragonSN(需要联系FAE获得)写入eFuse数据。另外一种是通过GIPO选择。通过组合高低电平实现启动顺序。
v853 也有这个功能,可以参考:https://v853.docs.aw-ol.com/hard/hard_3boardsch/#memoryemmc
-
回复: 【硬核干货】V853 Sample MPP软件包,MPP 摄像头测试包
在这之前,请按照 https://v853.docs.aw-ol.com/npu/npu_runtime/ 教程 安装 NPU 运行时!!
下载解压后放置到 tina5.0/openwrt/package/thirdparty 文件夹内。
make menuconfig 后可以在 Demo for v853 board 找到Demo for v853 board ---> <*> sample_mpp..................... sample_mpp binary for v853 eval
-
回复: 编译报错
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip lib32z1 lib32z1-dev lib32stdc++6 libstdc++6 -y
-
回复: tina linux怎么把摄像头的接口由mipi改为hispi
设置对应的含义为:
> status是vin驱动的总开关,对应的是media设备,使用vin时必须设为okay; > csi_top是vin模块的时钟,实际使用时可以根据sensor的帧率和分辨率来设置; > csi_isp是isp模块时钟,实际使用时可以根据sensor的帧率和分辨率来设置; > work_mode: 0:online mode 1:offline mode, 根据使用需求配置; > flash0_type: 0:FLASH_RELATING, 1:FLASH_EN_INDEPEND, 2:FLASH_POWER > flash0_en: flash enable gpio, type = 0 of 1 > flash0_mode: flash mode gpio, type = 0 of 1 > flash0_flvdd: flash module io power handle string, pmu power supply, type = 2 > flash0_flvdd_vol: flash module io power voltage, pmu power supply, type = 2 > status: 是否使用flash, disable代表关,okay代表开 > actuator0_name: vcm name > actuator0_slave: vcm iic slave address > actuator0_af_pwdn: vcm power down gpio > actuator0_afvdd: vcm power handle string, pmu power supply > actuator0_afvdd_vol: vcm power voltage, pmu power supply > status: vcm if used, disable代表关,okay代表开 > device_type: sensor type > sensor0_mname: sensor name > sensor0_twi_cci_id:sensor所使用的twi或者cci的id。 > sensor0_twi_addr:sensor的twi地址 > sensor0_mclk_id:sensor所使用的mclk的id。 > sensor0_pos:sensor的位置,前置还是后置,主要用在平板上。 > sensor0_isp_used: not use isp 1:use isp > sensor0_fmt: 0:yuv 1:bayer raw rgb > sensor0_stby_mode: not shut down power at standby 1:shut down power at standby > sensor0_vflip: flip in vertical direction 0:disable 1:enable > sensor0_hflip: flip in horizontal direction 0:disable 1:enable > sensor0_iovdd-supply: camera module io power handle string, pmu power supply > sensor0_iovdd_vol: camera module io power voltage, pmu power supply > sensor0_avdd-supply: camera module analog power handle string, pmu power supply > sensor0_avdd_vol: camera module analog power voltage, pmu power supply > sensor0_dvdd-supply: camera module core power handle string, pmu power supply > sensor0_dvdd_vol: camera module core power voltage, pmu power supply > sensor0_power_en: camera module power enable gpio > sensor0_reset: camera module reset gpio > sensor0_pwdn: camera module pwdn gpio > sensor0_sm_hs: camera module sm_hs gpio > sensor0_sm_vs: camera module sm_vs gpio > status: open or close sensor device > flash/actautor/sensor节点用于对应的外设的开关和配置。这些节点的配置一般需要参考对应方案的原理图和外设的data sheet来完成。 > vinc0_csi_sel:表示该pipeline上parser的id,必须配置,且为有效id。 > vinc0_mipi_sel:表示该pipeline上mipi(sublvds/hispi)的id,不使用时配置为0xff。 > vinc0_isp_sel:表示该pipeline上isp的id,必须配置,当isp为空时,这个isp只是表示路由不做isp的效果处理。 > vinc0_isp_tx_ch表示该pipeline上isp的ch,必须配置,默认为0。当sensor是bt656多通道或者WDR出RAW时,该ch可以配置0~3的值。 > vinc0_tdm_rx_sel: 表示该pipeline上tdm rx的ch,必须配置,默认为0。当不使用tdm功能时,配置为0xff; > vinc0_rear_sensor_sel表示该pipeline上使用的后置sensor的id。 > vinc0_front_sensor_sel 表示该pipeline上使用的前置sensor的id。 > vinc0_sensor_list表示是否使用sensor_list来时适配不同的模组,1表示使用,0表示不使用。 > work_mode: 0:online mode 1:offline mode, 根据使用需求配置;只有vinc0/4/8/12可以配置。 > status: vipp的使能开关,okay or disable。
这里提供的是使用设备树方案的配置名称,对于使用 sys_config.fex 的方案可以对照这里的设备树检查,配置项差别不大。hispi与mipi软件上只需要修改sensor驱动,不需要修改 V4L2框架,更不需要读写寄存器。具体方法参考 《Linux_MIPI_CSI_开发指南.pdf》(需要FAE提供)。
这里提供设备树的配置:
&vind0 { csi_top = <336000000>; csi_isp = <300000000>; status = "okay"; tdm0:tdm@0 { work_mode = <0>; }; isp00:isp@0 { work_mode = <0>; }; scaler00:scaler@0 { work_mode = <0>; }; scaler10:scaler@4 { work_mode = <0>; }; scaler20:scaler@8 { work_mode = <0>; }; scaler30:scaler@12 { work_mode = <0>; }; actuator0:actuator@0 { device_type = "actuator0"; actuator0_name = "ad5820_act"; actuator0_slave = <0x18>; actuator0_af_pwdn = <>; actuator0_afvdd = "afvcc-csi"; actuator0_afvdd_vol = <2800000>; status = "disabled"; }; flash0:flash@0 { device_type = "flash0"; flash0_type = <2>; flash0_en = <>; flash0_mode = <>; flash0_flvdd = ""; flash0_flvdd_vol = <>; status = "disabled"; }; sensor0:sensor@0 { device_type = "sensor0"; sensor0_mname = "gc2053_mipi"; sensor0_twi_cci_id = <1>; sensor0_twi_addr = <0x6e>; sensor0_mclk_id = <0>; sensor0_pos = "rear"; sensor0_isp_used = <1>; sensor0_fmt = <1>; sensor0_stby_mode = <0>; sensor0_vflip = <0>; sensor0_hflip = <0>; sensor0_iovdd-supply = <®_aldo2>; sensor0_iovdd_vol = <1800000>; sensor0_avdd-supply = <®_bldo2>; sensor0_avdd_vol = <2800000>; sensor0_dvdd-supply = <®_dldo2>; sensor0_dvdd_vol = <1200000>; sensor0_power_en = <>; sensor0_reset = <&pio PA 18 1 0 1 0>; sensor0_pwdn = <&pio PA 19 1 0 1 0>; sensor0_sm_hs = <>; sensor0_sm_vs = <>; flash_handle = <&flash0>; act_handle = <&actuator0>; status = "okay"; }; sensor1:sensor@1 { device_type = "sensor1"; sensor1_mname = "imx386_mipi_2"; sensor1_twi_cci_id = <0>; sensor1_twi_addr = <0x20>; sensor1_mclk_id = <1>; sensor1_pos = "front"; sensor1_isp_used = <1>; sensor1_fmt = <1>; sensor1_stby_mode = <0>; sensor1_vflip = <0>; sensor1_hflip = <0>; sensor1_iovdd-supply = <®_aldo2>; sensor1_iovdd_vol = <1800000>; sensor1_avdd-supply = <®_bldo2>; sensor1_avdd_vol = <2800000>; sensor1_dvdd-supply = <®_dldo2>; sensor1_dvdd_vol = <1200000>; sensor1_power_en = <>; sensor1_reset = <&pio PA 20 1 0 1 0>; sensor1_pwdn = <&pio PA 21 1 0 1 0>; sensor1_sm_hs = <>; sensor1_sm_vs = <>; flash_handle = <>; act_handle = <>; status = "okay"; }; vinc00:vinc@0 { vinc0_csi_sel = <0>; vinc0_mipi_sel = <0>; vinc0_isp_sel = <0>; vinc0_isp_tx_ch = <0>; vinc0_tdm_rx_sel = <0>; vinc0_rear_sensor_sel = <0>; vinc0_front_sensor_sel = <0>; vinc0_sensor_list = <0>; work_mode = <0x0>; status = "okay"; }; vinc01:vinc@1 { vinc1_csi_sel = <2>; vinc1_mipi_sel = <0xff>; vinc1_isp_sel = <1>; vinc1_isp_tx_ch = <1>; vinc1_tdm_rx_sel = <1>; vinc1_rear_sensor_sel = <0>; vinc1_front_sensor_sel = <0>; vinc1_sensor_list = <0>; status = "disabled"; }; vinc02:vinc@2 { vinc2_csi_sel = <2>; vinc2_mipi_sel = <0xff>; vinc2_isp_sel = <2>; vinc2_isp_tx_ch = <2>; vinc2_tdm_rx_sel = <2>; vinc2_rear_sensor_sel = <0>; vinc2_front_sensor_sel = <0>; vinc2_sensor_list = <0>; status = "disabled"; }; vinc03:vinc@3 { vinc3_csi_sel = <0>; vinc3_mipi_sel = <0xff>; vinc3_isp_sel = <0>; vinc3_isp_tx_ch = <0>; vinc3_tdm_rx_sel = <0>; vinc3_rear_sensor_sel = <1>; vinc3_front_sensor_sel = <1>; vinc3_sensor_list = <0>; status = "disabled"; }; ………… };
-
回复: 【求助】V853修改编译工具链为glibc,编译打包成功,但是启动失败
@westonye DRAM错误,可以试试只修改rootfs那部分的编译器,不改boot0的
-
回复: F1C200S SDK无法下载
- ls ~/.ssh/ 是否有钥匙对
- ~/.ssh/ 文件夹下是否存在多个钥匙对,是否选择了正确的钥匙对
- ssh 是否应用了钥匙对的设置
- ~/.ssh/ 文件夹的权限是否为 700 (drwx------)
- 客户服务平台的公钥是否提交并匹配本地密钥
- 用户名大小写是否一致
- repo/repo 文件中的用户名是否已经修改
- 是否使用了google官方的repo引导脚本而不是AW的repo引导脚本
- 是否使用了apt下载的repo引导脚本而不是AW的repo引导脚本
- repo init -u 后面的初始化地址是否错误
-
回复: D1S-F133 SD卡分区怎么扩容
@qq519472926 但是空间也变大了,还有一种方法是修改overlayfs的分区,或者使用udisk分区作为overlayfs。并修改fstab指定挂载点