您尚未登录。

#1 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » lvgl要显示上标该如何搞 » 2022-08-01 09:10:42

如果支持 ttf 的话,很多字体里是有上标字符的,百度搜索"上标字符",针对需要的字符复制过去就行了。

#3 Re: 全志 SOC » 发生一件很奇怪的事情,不知道问题出在哪里,大家帮忙看一下? » 2022-06-27 17:14:12

T113 的 sdk(Linux Kernel 5.4) 里的 disp_layer_config 的结构改了,加了两个成员变大了,我一时没看出来,被这个问题搞了一两个小时。不知你跟我的问题是否一样。

#4 全志 SOC » 问一个关于LCD电压的问题 » 2022-06-27 11:34:09

benlypan
回复: 0

有一批板子LCD供电电路VGH和VGL的绝对值都比LCD手册要求小了2-4V的样子,目前接上去显示是正常的,请问一下这个状态长期使用的话,会不会损坏液晶屏?

#5 Re: 全志 SOC » 荔枝派zero 双端显示数据 » 2022-06-03 09:41:21

u-boot: 显示驱动配置好的情况下,环境变量加上 stdout=serial,vidconsole 和 stderr=serial,vidconsole
Linux Kernel: 显示驱动配置好的情况下,配置开启 CONFIG_FRAMEBUFFER_CONSOLE

#6 Re: 全志 SOC » V3S FLASH无法识别 » 2022-05-15 08:26:59

尝试一下在 dts 里加大引脚输出能力

&spi0_pins {
	drive-strength = <40>;
};

#8 Re: 全志 SOC » xfel烧录到t113的0x20000sram失败是怎么回事 » 2022-05-10 13:57:05

CONFIG_SYS_TEXT_BASE 就在 .config 里配置的,全志的会有默认值。其他没有默认值的芯片一般对应的 defconfig 里也会指定上,如果没有默认值或要自定义的,那就自己在 make menuconfig 里配置上就是了。

这几个文件,一般情况下:
1. u-boot 文件是首先编译链接出来的 elf 格式的文件
2. 在1的基础上进行 objcopy 变成纯二进制代码文件,产生 u-boot-nodtb.bin
3. 在2的基础上在屁股那加上 dtb,就变成了 u-boot-dtb.bin,这个文件就是可以跑起来的 u-boot 程序了。u-boot.bin 跟 u-boot-dtb.bin 是一样的
4. 在3的基础上加上一个u-boot 的头,就变成了 u-boot-dtb.img,头里包含了校验码,入口地址(就是CONFIG_SYS_TEXT_BASE)等,这个文件是给 SPL 加载用的,正如我上面所说的,u-boot 要放到指定的内存地址上才能跑,SPL 加载了 U-BOOT 的镜像后,就是从这个头里知道要放哪里的
5. 在4的基础上,在头部那加上带了全志启动头的spl(在 spl 目录下,又是一堆生成文件),就变成了u-boot-sunxi-with-spl.bin,这是直接给全志的芯片加载用的。

启动的时候,BROM 识别到启动头,加载 SPL 执行,SPL 再去加载带了 u-boot 头的 u-boot,放到头里指示的位置上,再跳转到 u-boot 执行。就这么跑起来了。

以上是一般情况下的流程,不一般的比如带不带 dtb,带不带 spl,是用 legacy image 还是 fitImage,会有些差异。

#9 Re: 全志 SOC » xfel烧录到t113的0x20000sram失败是怎么回事 » 2022-05-10 11:08:41

1. 烧哪个文件? u-boot 编译出来一堆东西,其中 u-boot-dtb.bin 才是二进制代码文件,要烧这个
2. 烧到哪里? u-boot 里面符号地址都是固定的,起始地址是 CONFIG_SYS_TEXT_BASE 指定的,所以要烧到这个地址上,然后跳转执行这个地址

#10 Re: 全志 SOC » xfel烧录到t113的0x20000sram失败是怎么回事 » 2022-05-10 08:54:15

从哪里开始以及多少空间空闲的,每个型号的芯片都会不一样的,如果 sunxi-tools 尚未支持,要自己去探测和逆向。

根据XFEL的文档,对于 T113,他自带了 DDR 初始化支持,所以可以使用 xfel 先初始化 ddr,然后再写 u-boot 到 ddr 里执行

#11 Re: 全志 SOC » xfel烧录到t113的0x20000sram失败是怎么回事 » 2022-05-09 23:00:40

你应该用 sunxi-fel spl,不是 sunxi-fel write。
BROM 分两部分的,直接从 FLASH 上加载不进 FEL,所以没有这个问题。

#12 Re: 全志 SOC » xfel烧录到t113的0x20000sram失败是怎么回事 » 2022-05-09 19:54:08

T113 我没试过不清除具体的情况,但可以分享一下其他的芯片的经验。全志在 FEL 模式下的时候 SRAM 里面是有布局的,一般中间会夹杂着两个 Stack,分别是 IRQ Stack 和普通 Stack,每个芯片具体的位置会不一样。所以如果直接写程序到 SRAM 里,一般情况下是会破坏了栈,从而造成死机。
sunxi-tools 里用了奇技淫巧,分段写入程序,绕开这 stack 位置,然后写入一段特殊的 thunk 程序,再执行这个 thunk 程序,他会备份 stack,然后把之前分段的程序复制回去,然后再跳转执行,以此来来利用整个 SRAM 空间,完事了还能把 Stack 恢复回去,让 FEL 继续正常工作,使接下来能写 u-boot 到 DDR。sunxi-fel spl 干的就是这个事。
参考1: 实现原理
参考2: 代码1 代码2

#13 Re: 全志 SOC » 全志H3整板 海鲜市场这个能不能折腾一下 » 2022-05-07 13:38:41

我问了老板能点亮吗,老板说是取芯片用的,那就是料板了。。。

#14 Re: 全志 SOC » 入坑了,我也入坑了,开启奇妙的ArmLinux入坑之旅 » 2022-05-05 23:14:44

买全志的开发板前可以先看看这张表https://linux-sunxi.org/Linux_mainlining_effort#Status_Matrix,主线 Linux 支持程度高的玩起来轻松一点。当然如果要挑战自己,研究驱动移植的话,就挑支持少的。

#15 全志 SOC » 这两天研究 V3s 主线内核 DRM 时遇到的 BUG 分享一下 » 2022-05-02 23:10:58

benlypan
回复: 0

1. 图像输入宽度超过1024后,显示不正常的问题,这是由于驱动中对于 V3s 的 scanline 值配置不正确引起到,目前最新的内核(5.18-rc)依然存在这个 bug。该问题我在另外一个贴子描述过。
    解决方法: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpu/drm/sun4i/sun8i_vi_layer.c?h=v5.18-rc5#n192 这行直接赋值为 1024 就行。

2. 第二个 Plane 输入 YUV 格式时颜色不正常。该问题主线在 5.9 的时候修复过了(5.4.70 也打了补丁),但估计很多人还在使用 5.2 版本,所以再此多提一嘴。问题一共是两处:一处是第二个 Plane 的 CSC 寄存器地址不正确,另外一处是 Mixer 的寄存器映射范围不正确。
    解决方法: 参考主线的两个提交:提交1, 提交2

#16 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-05-01 20:14:30

ubuntu 说:

@benlypan
牛,请问最后怎么解决的呢?

把 2048 改成 1024 就行了。V3s 里 YUV 和 RGB 的 scanline 都是 1024,所以可以直接把 https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L192 这行改成 scanline = 2048 就行了。
然而我的情况比较特殊,我要在别的产品里二次开发,不能换内核,所以就写了个内核模块,启动时 insmod 来动态更改这个配置,这样只能对 YUV 生效,不过反正我也不用 RGB,分享下这个内核模块的代码

#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/platform_device.h>
#include "../linux/drivers/gpu/drm/sun4i/sun8i_mixer.h"

static const struct sun8i_mixer_cfg sun8i_v3s_mixer_cfg = {
    .vi_num = 2,
    .ui_num = 1,
    .scaler_mask = 0x3,
    .scanline_yuv = 1024,
    .ccsc = 0,
    .mod_rate = 150000000,
};

static struct sun8i_mixer* mixer;
static const struct sun8i_mixer_cfg* old_mixer_cfg;

static int find_device_match(struct device* dev, void* data) {
   return 1;
}

static int __init fixdrm_init(void) {
    struct device_driver* drv;
    struct device* dev;

    drv = driver_find("sun8i-mixer", &platform_bus_type);
    if (!drv) {
        pr_err("driver not found");
        return -ENODEV;
    }

    dev = driver_find_device(drv, NULL, NULL, find_device_match);
    if (!dev) {
        pr_err("device not found");
        return -ENODEV;
    }

    mixer = dev_get_drvdata(dev);
    if (!mixer) {
        pr_err("mixer not found");
        return -ENODEV;
    }

    old_mixer_cfg = mixer->cfg;
    pr_info("scanline_yuv: %d\n", old_mixer_cfg->scanline_yuv);

    mixer->cfg = &sun8i_v3s_mixer_cfg;
    
    return 0;
}

static __exit void fixdrm_exit(void) {
    if (mixer && old_mixer_cfg) {
        mixer->cfg = old_mixer_cfg;
    }
    pr_info("exit\n");
}
 
module_init(fixdrm_init);
module_exit(fixdrm_exit);

MODULE_LICENSE("GPL");

#17 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-05-01 18:13:17

benlypan 说:

我今天在研究 V3s 的 DRM,内核版本就是 5.2,发现一个问题,输入图像格式是 NV21,然后调用 drmModeSetPlane 时如果 SRC_W 超过 1024 图像就显示就不正常,1024以下完全没问题。请问我碰到的这个问题跟您解决的BUG是否相关?

研究了将近两天时间,终于把这个问题给搞定。DE 里有个叫 scanline 的东西,V3s 里的值是 1024,输入宽度要是超过 scanline,需要进行"coarse scaling",然后主线里将 V3s 的这个值配置成 2048 了,所以图像显示不正常。

全志 Linux 的相关代码 https://github.com/Tina-Linux/tina-v3s-linux-4.9/blob/master/drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_sun8iw8/de_rtmx.c#L1212 https://github.com/Tina-Linux/tina-v3s-linux-4.9/blob/master/drivers/video/fbdev/sunxi/disp2/disp/de/lowlevel_sun8iw8/de_feat.c#L57

主线 Linux 的相关代码 https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/sun4i/sun8i_vi_layer.c#L192 https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/sun4i/sun8i_mixer.c#L583

一开就猜测是驱动的 bug,然后有了以下排查流程:
1. 换最新版本的主线内核,问题依旧
2. 因为我用的是 AIC502,虽然跟 V3s 一样,但就担心硬件有差异,换 V3s,一样有问题
3. 换 A64 用主线内核,不存在问题,他们都属于 DE2,用的是同一份驱动,难道是某些条件下对 V3s 设置错寄存器值了?于是用同样的内核版本,同样的测试数据,把 DE 的相关寄存器值都 dump 下来,比对发现几乎一模一样,泪崩。
4. 换全志的 Linux Kernel,不存在问题,此时确定了肯定是驱动问题,不是硬件问题。再把这个系统下的寄存器值 dump 下来,与主线的一个个寄存器比对过去,发现了一个输入宽度相关的寄存器数值不一样,全志的内核是 1024,主线是我图像的宽度 1280,进一步确定了 1024 是一个 magic number
5. 打开调试日志+printk大法,很快定位到是这个 scanline 引起的。虽然具体的计算原理没看懂,但问题解决了。

#18 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-30 12:12:42

wupaul2001 说:

5.2内核中,DRM驱动有问题,不知道后面有没有改进,前面做一个热成像与普通摄像头图像混合时发这个问题,但在我对DRM的各种偿试,把DRM的寄存器与功能摸彻底后,驱动就更正了,但由于是保密项目,就没patch到主线

我今天在研究 V3s 的 DRM,内核版本就是 5.2,发现一个问题,输入图像格式是 NV21,然后调用 drmModeSetPlane 时如果 SRC_W 超过 1024 图像就显示就不正常,1024以下完全没问题。请问我碰到的这个问题跟您解决的BUG是否相关?

#19 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-27 12:05:24

https://github.com/lindenis-org/lindenis-v536-package
这就是 tina,全志的硬解软件分3个部分:
1. 内核驱动模块,就是 /dev/cedar_dev,你现在已经有了
2. cedarc, 操作内核模块,各种格式的解码模块(闭源),导出解码接口,这是接口文档http://files.lindeni.org/lindenis-v536/ … %d1%9e.pdf
3. cedarx, 集成了数据流解析,解码(调用 cedarc),渲染等功能,也就是完整的播放器了,xplayerdemo 就在里面(allwinner/tina_multimedia/libcedarx/demo/xplayerdemo)

#20 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-25 09:30:39

/dev/disp 是全志的显示模块驱动的设备文件,主线中功能与之对应的是 drm,故主线中不会有 /dev/disp,除非将全志的显示驱动移植过来。尚不清除用全志的解码驱动与主线的 drm 能不能合作。
主线也有对应的解码驱动,叫 cedrus( https://linux-sunxi.org/Sunxi-Cedrus ),他能很好的与 drm 合作。只是 v3s 的还没合并到主线,这是开发中的代码 https://github.com/mcerveny/linux/commits/v3s_videocodec_v4 ,我没试过,但有计划去尝试。主线的解码接口叫 v4l2-request,可以参考这个工程如何调用解码以及如何调用 drm 进行渲染
https://github.com/bootlin/v4l2-request-test ,关于主线的渲染的流程可参考这个文档FOSDEM_Presentation_2018___Lukas_Rusak.pdf

#21 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-22 10:08:13

哦对了,tina 里 libcedarx 下有 xplayerdemo,可以硬解和"硬渲染",可以尝试一下。

#22 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-22 10:02:31

全志的显示模块 DE 分多个通道,其中通道0和通道1为视频通道,可接受 YUV 和 RGB 格式,通道之间可以透明叠加。一个通道分多个层(一般4层),层之间可叠加。同一个通道只接受一种像素格式,默认情况下 /dev/fb0 配置在通道1的第0层上,那么放视频就要放在通道0上了。在放视频的时候可看一下当前的 DE 状态 /sys/class/disp/disp/attr/sys
比如我这个

# cat /sys/class/disp/disp/attr/sys 
screen 0:
de_rate 297000000 hz, ref_fps:58
mgr0: 1024x600 fmt[rgb] cs[0x0] range[limit] unblank direct_show[false] 
	lcd output	backlight( 50)	fps:58.5	1024x 600
	err:0	skip:1	irq:154729	vsync:0	vsync_skip:0	
   BUF    enable ch[0] lyr[0] z[1] prem[N] a[globl 255] fmt[ 77] fb[1280, 736;1280, 736;1280, 736] crop[   0,   0,1280, 720] frame[  85,   0, 853, 480] addr[5b400000,5b4e6000,       0] flags[0x       0] trd[0,0]
   BUF    enable ch[1] lyr[0] z[0] prem[N] a[pixel 255] fmt[  0] fb[1024, 600;1024, 600;1024, 600] crop[   0, 600,1024, 600] frame[   0,   0,1024, 600] addr[58100000,       0,       0] flags[0x       0] trd[0,0]

ch0 lry0 是 fmt77 格式,也就是NV21格式,就是我显示视频的层了。ch1 lyr0 是 fmt0 格式,是 ARGB 格式,就是/dev/fb0,是我显示UI的层。如果当前只有一个 fmt0 的层,那么铁定不是"硬渲染"的。

我不知道有没有现成的软件,我这个播放器是自己写的,但是是公司的项目,不好开源出来。

#23 Re: NXP i.MX6UL/6ULL » 挂载nfs失败。 » 2022-04-21 20:52:18

内核参数加上 nfsrootdebug=1 可以看到 nfs 挂载过程的日志。另外,试试 nfsroot 加上 v3 参数(nfsroot=192.168.1.104:/home/any/MPU/imx6ul/nfs/debian,v3),这么新的内核版本默认应该是 v4,我这使用 v4 起不来,也没去细究原因。

#24 Re: 全志 SOC » 怎么判断v3s已经是硬解 » 2022-04-21 20:00:26

最简单的方法,看 CPU 占用,如果硬解的话,基本不占 CPU。另外还可以用 lsof 看进程是否打开了硬解相关的设备文件,比如全志驱动的 /dev/cedar_dev 和 /dev/ion,主线驱动的 /dev/video0 和 /dev/media0。
还有一点,如果放视频的话,除了硬解,还要"硬渲染"配合,因为全志硬解输出的是 NV21 格式,如果用 framebuffer 放的话,要从 YUV 转 RGB,即使使用 NEON 也慢的要命。全志驱动的 /dev/disp 或者主线驱动的 /dev/dri/card0 就是干这个的。

#25 Re: 全志 SOC » 最近想开一个A133的坑,有人来一起填吗? » 2022-04-21 19:49:19

baidxi 说:
benlypan 说:

@baidxi
只是做了微小的工作,让 sunxi-fel 可以识别 A133,能下载程序,执行 thunk 代码。计划是下一步开始研究 SPL

我也在准备研究一下SPL,能否分享一下sunxi-fel?
最近打算用jtag下载SPL执行。

我上传到 github 了,通过 FEL 执行 sunxi-tools 里的 uart0-helloworld-sdboot 程序是没问题的。

https://github.com/benlypan/sunxi-tools

全志64位的芯片的 FEL 很恶心,看 U-BOOT 2021.04 引入了一种使用 cpu hotplug 的黑科技从 SPL 跳回到 FEL,不知道 A133 是否兼容这个黑科技,我之前刚研究到这步。

#26 Re: 全志 SOC » 最近想开一个A133的坑,有人来一起填吗? » 2022-04-20 23:11:13

@baidxi
只是做了微小的工作,让 sunxi-fel 可以识别 A133,能下载程序,执行 thunk 代码。计划是下一步开始研究 SPL

#27 Re: 全志 SOC » 最近想开一个A133的坑,有人来一起填吗? » 2022-04-20 20:50:28

我也有这个计划,看 A133 大部分外设跟 H6 差不多,于是想自己适配主线 U-BOOT 和 Linux Kernel。3月初时开了个头,适配了 sunxi-fel,然后因为要忙别的项目搁置了。

#28 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 关于linux虚拟串口的开发 » 2022-04-18 11:30:42

这要看你USB设备端的需求:
1. 如果设备端仅仅是与主机通过虚拟串口来数据通信的,那么就不需要设置波特率。
2. 如果设备端要做一个类似于USB转串口的应用,需要让主机端来设置设备串口输出的波特率的,那么就要设置波特率。

简单的讲,对于 ACM 设备,主机会把波特率、数据位这些串口参数封装成一个数据包请求下发到设备端,如果你没调API设置过,那么是有一个默认值的。设备端收到这些参数后用来干啥是设备端的业务问题。ACM通信本身是没有波特率这些需求的。

#29 Re: 全志 SOC » 又捡到个东西,来鉴定一下 » 2022-03-28 10:58:42

S905L 网上很多镜像啊,OpenWrt, Armbian, EmuElec 都可以搞,前提是有合适的 dtb。Amlogic 的芯片玩这些系统的人很多

#30 Re: 全志 SOC » 全志v3s的spi总线的问题 » 2022-01-13 09:29:00

可以将多个SPI设备与文件系统FLASH挂载在一起的,因为系统运行过程中执行程序或者读取文件也是按扇区读 flash 内容到内存中再执行或操作的,这完全是操作系统层面的逻辑,不会在硬件上独占SPI总线,因此可以与其他SPI设备挂载在一起。
有两点要注意:
  1. 其他设备的 CS 脚需硬件上拉,原因是 CPU 上电后 BROM 读取 U-BOOT SPL 的时候,他不知道有其他 SPI 设备的存在,所以不会去控制这些 SPI 设备的片选信号,如果不硬件上拉,这些 SPI 设备的 CS 脚的状态是不确定的,会干扰总线,造成启动失败。
  2. 使用多个 SPI 设备,需要改用 GPIO 来控制 CS 信号

#31 Re: 全志 SOC » 全志A33 , 4核,1.2G主频 » 2021-12-18 15:11:59

可以尝试主线 u-boot 和 linux kernel

#32 Re: 全志 SOC » V3S插入USB设备没有反应 » 2021-12-03 08:47:30

我在 dts 中这么配置了就能用了

/ {
	soc {
		ehci0: usb@01c1a000 {
			compatible = "allwinner,sun8i-v3s-ehci", "generic-ehci";
			reg = <0x01c1a000 0x100>;
			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>;
			resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>;
			status = "okay";
		};

		ohci0: usb@01c1a400 {
			compatible = "allwinner,sun8i-v3s-ohci", "generic-ohci";
			reg = <0x01c1a400 0x100>;
			interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
			clocks = <&ccu CLK_BUS_EHCI0>, <&ccu CLK_BUS_OHCI0>,
			<&ccu CLK_USB_OHCI0>;
			resets = <&ccu RST_BUS_EHCI0>, <&ccu RST_BUS_OHCI0>;
			status = "okay";
		};
	};
}

&usb_otg {
	dr_mode = "host";
	status = "okay";
};

&usbphy {
	status = "okay";
};

#33 Re: 全志 SOC » 全志v3s MAC地址不固定的问题 » 2021-10-17 22:21:48

u-boot 会根据芯片 id 生成 mac 地址(实现代码在 board/sunxi/board.c 中的 setup_environment 函数里),并传递给 Linux 内核(实现代码在 common/fdt_support.c 中的 fdt_fixup_ethernet 函数里)。前提是 dts 要配置。
在 u-boot 的 dts 中的 aliases 里加上 ethernet0 = &emac; 这样 u-boot 就会自动生成 ethaddr 环境变量。在 Linux 的 dts 中除了加上 aliases 的那句,还要在 emac 里加上 mac-address = [ 00 00 00 00 00 00 ]; 这么一个占位符,那么 u-boot 在启动 Linux 内核的时候,会将环境变量里的 ethaddr 环境变量里的内容覆盖写入 Linux 的 dts 里,这样 Linux 就能得到由芯片 id 生成的 mac 地址了。
所以检查一下 dts 的相关配置

#34 Re: 全志 SOC » V3S UBOOT 网络打开后 ping一下就进异常中断 » 2021-08-16 09:38:49

这是触发了 Data Abort 中断,访问了无效地址就会触发这个中断

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn