页次: 1
那肯定不行啊,前提当然是你的镜像里面的uboot和kernel都包含有相应的spi nand的驱动,然后会根据你镜像写入的方式去读取各个数据段。我所说的跟镜像没关系,是指根镜像的生成和打包方式没关系,你还真以为直接烧录TF卡的镜像就能用啊。
系统想要在spi nand上运行,和镜像没关系吧,关键看你怎么把镜像写到spi nand里面,读取的时候又以什么方式去读取,以此来避开坏块。
我移植了miyoo的FBA模拟器,只是这一个模拟器而且,在V3S上流畅运行,在F1C200S上就不是很流畅了,可能是因为我的显示输出分辨率比较高(1024*600),但这东西必须开虚拟内存,否则就只能玩玩容量小的游戏,没啥意思,自己玩玩可以,做不了产品。
zhouyu2019 说:我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
有display engine跑通的例子么?我看1c200s手册上可以配置layer层输入是YUV然后显示到LCD上的,但是没配置成功。
按道理drm是直接能用的,只是我嫌不够灵活,于是我自己根据数据手册去写display-engine的驱动,但也很不容易,最后还是参考了tina里面的驱动才跑通的。根据我调试的结果,直接用de-be的YUV图层是可以正常使用的,但是不支持YUV420_MB32的格式。如果要支持YUV420_MB32,还是得用de-fe,而de-fe的用法要比de-be复杂很多。
没有1366*768 RGB接口的屏吧?转LVDS吗?
我也是在这个地方卡了很久,后来才知道yuv_mb32这种格式,其实f1c100s的 display engine 就支持yuv_mb32视频图层,不需要软件去转换。
我是在TCON中断里面去切显存地址,这样就不会有闪烁或者撕裂现象。
我也买了这块板子,确实便宜,但是配套的资料感觉好敷衍,默认系统起来之后可用内存剩下几MB,没法用。
最近在调 aodzip 大神移植的cedar驱动,内核必须打开"DMA Contiguous Memory Allocator"选项,但是打开后发现触摸屏不好使了,原来是外部中断申请就失败"Goodix-TS 0-0014: request IRQ failed: -22",真不知道这两者有什么关系?麻烦大家帮忙分析一下。
大佬,这个能用在v3s上吗
我看到别的帖子里有坑友说已经在V3S上验证过视频解码,可以用。
我试了在你的基础上配合 tina 里面的 jpeg 解码demo是可以解码的(但是解出来的YUV裸流数据排列比较奇葩,不知道是不是本来就有这种标准),按道理也可以解码其它格式的码流,只是 tina 里面的 tplayer 我不知道怎么移植,我也正在尝试使用DE-BE来把 YUV 转成 RGB。
aodzip 大神,能不能介绍一下cedarX怎么使用?我按照 github 上“Allwinner CedarX Driver for Mainline Linux 5.4” 配置完cedarX,也编译了 libcedarc,但不知道怎么使用,是不是要像 tina 那样编译一个 tplayer 才行?还有解码出来的YUV 裸流要怎么配合 de-be 进行转换并显示?是不是要开启 drm,使用drm的接口来显示?
肯定没法跑的,16位的SDRAM的带宽在那里,至少得用32位的SDRAM才勉强可以用。我用STM32F7就是这样,加了个32位的SDRAM,再把图形加速用起来才能做点界面。
可以直接移植掌机miyoo的模拟器,别说nes了,街机啥的都能玩,github有源码,不过可能程序有点老不是最新的。
主线Linux的摄像头调通了吗?
楼主手艺不错,准备跑主线linux还是bsp linux?
你的ttyUSB是4G模块生成的吗?
还是说F1C200S外接的USB转串口?用真实串口去给模块ppp无法上网?????这是什么操作??不是应该没有影响吗?也没通过USB呀
4G模块是RNDIS拨号上网,不是PPP,当4G模块通过USB接到HOST时,会生成几个ttyUSB设备和一个网卡接口,ttyUSB接口走调试log和AT命令,网卡接口走网络数据。AT命令也可以直接通过真实串口来控制4G模块,用法和虚拟出来的串口是一样的。
经过测试发现,通过ttyUSB给4G模块发AT指令,模块是能收到的,只是出于某种原因F1C100S没收到模块的回复。用真实串口去给模块拨号,发现也连不上网,说明不止tttyUSB有问题,连网卡驱动也受到hub的影响,这就麻烦了。
下面是F1C200S手册和V3S手册中关于OTG部分的说明
V3S说自己的USB HOST是EHCI和OHCI并且给了寄存器,
而F1C200S并未提及USB是啥,而且也没有给寄存器。
都说自己8个端点可配置。
感觉不能用可能是分配的问题
在 kernel/drivers/usb/musb/sunxi.c 中有定义端点数,这个数不知道是怎么得到的:
对于V3S:
/* H3/V3s OTG supports only 4 endpoints */
#define SUNXI_MUSB_MAX_EP_NUM_H3 5
对于其它(包括F1C100S):
/* Allwinner OTG supports up to 5 endpoints */
#define SUNXI_MUSB_MAX_EP_NUM 6
如果真的是芯片硬件不支持,至少希望能够知道问题是出在哪里,哪个地方导致它不支持,不然我不甘心就这样放弃。
你试一下你现在的内核,HUB可不可以接2个U盘或者usb转串口模块
试了通过hub接3个U盘或者USB转串口模块都可以正常枚举和读写,因为V3S相同的内核以及配置都能正常使用,所以我不太怀疑是内核配置的问题,试过把OTG关掉只作HOST也是不行。我还对比了一下V3S和F1C100S中USB驱动源码(sunxi-usb.c和phy-sun4i-usb.c),里面对于USB端点数的配置两者也是一样的。我也怀疑过芯片USB端点数量的问题,看了F1C600的芯片手册,USB端点数和V3S是一样有8个,所以买了F1C200S和F1C600来替换,结果都一样,真是不知道怎么办了。
F1C100S只有一个USB接口,在实际应用中加hub成为必须,最近在调试使用4G模块进行联网,发现把4G模块直接接到OTG接口上使用正常,经过USB Hub之后就不正常了,现象是设备正常枚举,但往 ttyUSB 发AT命令没任何响应,测试了SIM7600和EC200S结果都一样。系统是主线linux-5.2,使用V3S(也是主线linux-5.2)进行测试却没有出现类似问题,是否可以确定是F1C100S芯片的问题?被这个问题困扰好久了,应该怎么定位和解决?希望各路大神帮忙分析指点一下,非常感谢!
我是在28楼的基础上进行调试的,也没修改太多东西:
1.设备树、内核、rootfs根据spi-nand的块大小对齐存放,也就是128K对齐;
2.设备树里面根据芯片容量和存放地址修改flash分区,并添加memory节点;
3.我用的是W25N01GV,发现uboot驱动中的“spi_nand_read_pages_fast”,接口读数据会出错,改用“spi_nand_read_pages”;
大概就这些,最重要的是想办法把数据写到spi nand里面,毕竟sunxi-fel是开源的,可以把uboot中的spi nand驱动及坏块管理移植上去。
谢谢晕哥,总算启动成功了,对比了spi-flash的uboot,发现uboot在把设备树传给kernel之前会添加memory的节点(我自己生成的dtb里面没有memory节点),而spi-nand的uboot不会给设备树添加这个节点,于是我在dtb里面添加上去就好了。虽然不知道为什么会有这个区别,折腾了好久,一直以为是kernel的问题。
晕哥,在spi-flash上用主线uboot+主线linux是没问题的,我现在用的是spi-nand,所以只能用这个改版的uboot,内核就起不来了。
@晕哥,请问这个uboot能引导主线linux吗?我试了会卡在"Starting kernel...",不知道是要改uboot还是改kernel,能指点一下吗?谢谢!
嗯嗯,大家一起学习,把芯片用起来。
请假楼主,有没有 libdrm 的测试代码,我试一试,
还有,这个drm 是软件实现的吗?
libdrm是一个开源库,这里可以下载: http://www.linuxfromscratch.org/blfs/view/stable/x/libdrm.html ,
下载到的库里面就有测试程序,其实也可以在buildroot里面勾选libdrm,会自动帮你下载和编译。另外libdrm只是将linux的drm驱动包装一下,使接口更加友好而已,实际功能实现还是在内核驱动里面,我觉得它是硬件实现的。
全志主线显卡都是软件驱动的,我觉得还是驱动配置和设备树的原因
我觉不是软件驱动的,在linux/driver/gpu/drm/sun4i/目录下有display engine的驱动,而且确实被调用了,实测plane叠加速度也不慢。
那没有理由没有drm,4.14以前的版本我记得就没有drm
对呀,我也是刚入门,不知道生成drm是依赖于哪些配置,对比了nano和zero的内核,相关配置是一样的,会不会是设备树的原因?但我看了设备树里面有display engine的节点。
nano你用的是 linux4.14?4.15?
zero用4.13?
现在nano和zero都是5.2系统
nano你是怎么做的呢?
我是自己加libdrm,然后就可以基于它的接口进行编程,我也只是试了一下libdrm内置的测试程序。
我们在做界面显示的时候,如果处理器内置硬件图形加速,那显示效果将会大大提升。STM32有DMA2D,新唐N32926有BLT和VPE,对于全志的片子(f1c100s或者V3S)则是display engine,实现的功能差不多(包括显示数据格式转换、图层叠加、透明混合等,高级点的带旋转缩放)。
荔枝派nano的系统有drm接口,可以实现硬件plane的混合叠加,但功能很有限,而荔枝派zero的系统则没有生成drm接口,不知道是不是哪里配置不对?另外我们要怎样才能利用display engine的价值?使用LittlevGL和QT做界面都是纯软件绘图,有点浪费。
还可以直接在nano上直接使用gcc,不存在以上环境问题
这么厉害,还能在板子上编译程序,不过感觉不是很实用,哈哈。
谢谢晕哥,加了“-with-arch=armv4”或者“-with-arch=armv5te”都不行,提示没有这个选项,改成“-march=armv5te”倒是可以,但编译出来的可执行文件也运行不起来。
你发的这个工具链,是编译uboot、内核、根文件系统、应用程序都用这一个对吗?
好的,我试一下
arm-linux-gnueabi-gcc --with-arch=armv4 --static
编译的时候, 加上这个指令试一试。
或者:
arm-linux-gnueabi-gcc --with-arch=armv5te --static
这样啊,那就有点坑了,官方教程在编译uboot的时候让下载这个工具链,后面的内容也没说要用其它工具链来编译。
晕哥,那我到底应该用哪个工具链来编译呢?buildroot里面的那个工具链我试了确实就没问题了,但它又只有arm-linux-gcc,没有arm-linux-g++,不知道什么原因,好纠结。
gcc-linaro-7.2.1 下载的完整链接发一下,我看看问题在哪里
谢谢晕哥!这是工具链下载的完整链接: http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
你用的是哪个gcc工具链?
我自己编译的系统:内核和应用程序都是用gcc-linaro-7.2.1编译,根文件系统没去配置工具链,直接用的官方的.config文件,工具链是它自己安装的,编译完能看到使用的工具链版本是7.3的。
官方的系统:内核用gcc-linaro-7.2.1编译,根文件系统和应用程序用什么版本的我不知道,反正我用gcc-linaro-7.2.1编译的应用程序在官方系统上也是一样不能用。
链接的时候加 -static 命令, 静态链接解君愁.
静态编译也不行,运行后没有输出segmentation fault,变成Illegal instruction了
刚入手了一块荔枝派Nano的板子,按照官方的教程好不容易把系统跑起来了,写一个最简单的程序"Hello word!",放到板子上一运行就"segmentation fault",完全不知道什么情况,即使烧官方搭建好的系统也一样,百度了好久都找不到答案,后来通过file命令查看该可执行文件得到:
print_test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=db8e6e41226ba13dc89fc5ebeaf8e8fa0a8ac0cd, with debug_info, not stripped
然后我就尝试file根文件系统下的busybox,得到:
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
于是猜测是编译器版本的问题,编译应用程序的时候使用的编译工具应该是要和根文件系统的交叉编译工具一致才行,可我完全是按照官方教程做的呀,如果存在这么大的问题,为什么官方完全没有提及呢?
页次: 1