页次: 1
https://github.com/tinalinux/package/tree/r16-v2.1.y/qt/qt5
有些版本的tina确实自带了 Qt5
流氓兔 说:好像不支持 SPI FLASH, 大佬可以把这个代码合并进去吗?
https://github.com/Lichee-Pi/u-boot/commits/v3s-spi-experimental
等我有能测试SPI设备的时候再搞
基本全了,只差SPI FLASH
https://github.com/torvalds/linux/blob/master/drivers/gpio/gpio-74x164.c
https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/fairchild%2C74hc595.yaml
74HC595 / 74HC164 在 Linux 用 SPI 驱动 74HC595/164 ^_^
下载: qemu_arm_samples_modify.7z
qemu_arm_samples\swi01\swi01.uvproj
MDK 可以测试, 记得安装对应的软件包.
---------------------------------------------
支持ARM7/9旧器件的 MDK 版本:
http://www2.keil.com/mdk5/legacy/
https://armkeil.blob.core.windows.net/legacy/MDK79525.EXE
https://armkeil.blob.core.windows.net/legacy/MDK79524.EXE
win32 gcc下载: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
参考:
step by step 全志 f1c100s MDK 裸奔各种外设(参考N3290x)
https://whycan.com/t_1527.html
(出处:哇酷开发者社区)
https://www.cnblogs.com/lifexy/p/7117345.html
注:ARM9是3级流水线,也就是PC处理时正在执行第1条指令的同时对第2条指令进行译码,并将第3条指令从存储器中取出,如下图所示,PC总是指向第3条指令取值的地方。
https://www.cnblogs.com/lifexy/p/7117345.html
LDR r1,[r2,#16] //将(r2+16)地址中的内容存到r1中
这个代码不行:
.arm
_arm_mode:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x31 //输出1
str r1, [r0]
ldr r6, =_thumb_mode + 1
add r6, #1
// adr r6, _thumb_mode + 1
bx r6
.thumb
_thumb_mode:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x32 //输出2
str r1, [r0]
ldr r1, =0x33 //输出3
str r1, [r0]
ldr r1, =0x34 //输出4
str r1, [r0]
_loop:
b _loop //死循环
bx lr //跳回去
生成的代码:
$ arm-linux-gnueabi-objdump -D strap.o
strap.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <_arm_mode>:
0: e59f0024 ldr r0, [pc, #36] ; 2c <_loop+0x6>
4: e3a01031 mov r1, #49 ; 0x31
8: e5801000 str r1, [r0]
c: e59f601c ldr r6, [pc, #28] ; 30 <_loop+0xa>
10: e2866001 add r6, r6, #1
14: e12fff16 bx r6
00000018 <_thumb_mode>:
18: 4804 ldr r0, [pc, #16] ; (2c <_loop+0x6>)
1a: 4906 ldr r1, [pc, #24] ; (34 <_loop+0xe>)
1c: 6001 str r1, [r0, #0]
1e: 4906 ldr r1, [pc, #24] ; (38 <_loop+0x12>)
20: 6001 str r1, [r0, #0]
22: 4906 ldr r1, [pc, #24] ; (3c <_loop+0x16>)
24: 6001 str r1, [r0, #0]
00000026 <_loop>:
26: e7fe b.n 26 <_loop>
28: 4770 bx lr
2a: 10000000 andne r0, r0, r0
2e: 0019101f andseq r1, r9, pc, lsl r0
32: 00320000 eorseq r0, r2, r0
36: 00330000 eorseq r0, r3, r0
3a: 00340000 eorseq r0, r4, r0
...
这个是可以的:
.arm
_arm_mode:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x31 //输出1
str r1, [r0]
// ldr r6, =_thumb_mode + 1
// add r6, #1
adr r6, _thumb_mode + 1
bx r6
.thumb
_thumb_mode:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x32 //输出2
str r1, [r0]
ldr r1, =0x33 //输出3
str r1, [r0]
ldr r1, =0x34 //输出4
str r1, [r0]
_loop:
b _loop //死循环
bx lr //跳回去
生成的代码:
$ arm-linux-gnueabi-objdump -D strap.o
strap.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <_arm_mode>:
0: e59f0020 ldr r0, [pc, #32] ; 28 <_loop+0x6>
4: e3a01031 mov r1, #49 ; 0x31
8: e5801000 str r1, [r0]
c: e28f6001 add r6, pc, #1
10: e12fff16 bx r6
00000014 <_thumb_mode>:
14: 4804 ldr r0, [pc, #16] ; (28 <_loop+0x6>)
16: 4905 ldr r1, [pc, #20] ; (2c <_loop+0xa>)
18: 6001 str r1, [r0, #0]
1a: 4905 ldr r1, [pc, #20] ; (30 <_loop+0xe>)
1c: 6001 str r1, [r0, #0]
1e: 4905 ldr r1, [pc, #20] ; (34 <_loop+0x12>)
20: 6001 str r1, [r0, #0]
00000022 <_loop>:
22: e7fe b.n 22 <_loop>
24: 4770 bx lr
26: 10000000 andne r0, r0, r0
2a: 0032101f eorseq r1, r2, pc, lsl r0
2e: 00330000 eorseq r0, r3, r0
32: 00340000 eorseq r0, r4, r0
难道是ldr伪指令不能生成跳转到thumb?
.arm
_reset:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x31 //输出1
str r1, [r0]
// ldr r0, =_thumb_mode + 1
adr r0, _thumb_mode + 1
bx r0
.thumb
_thumb_mode:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x32 //输出2
str r1, [r0]
ldr r1, =0x33 //输出3
str r1, [r0]
这样可以输出 123 了, 前面没有初始化 r0 寄存器.
再加上
ldr r0, =_thumb_mode + 1
替换
adr r0, _thumb_mode + 1
$ qemu-system-arm -M versatilepb -m 128M -nographic -kernel notmain.bin
123
请问@aozima老大,为什么ldr指令不可以呢?
strap.s
.arm
_reset:
ldr r0, =0x101f1000 //UART0发送寄存器地址
ldr r1, =0x31 //输出1
str r1, [r0]
ldr r0, =_thum_mode + 1
bx r0
.thumb
_thum_mode:
ldr r1, =0x32 //输出2
str r1, [r0]
ldr r1, =0x33 //输出3
str r1, [r0]
@aozima 再请教大佬一个问题,为什么这个代码只能输出 1呢, 不能输出 2, 3
$ arm-linux-gnueabi-objdump -D strap.o
strap.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <_reset>:
0: e59f0014 ldr r0, [pc, #20] ; 1c <_thum_mode+0x8>
4: e3a01031 mov r1, #49 ; 0x31
8: e5801000 str r1, [r0]
c: e59f000c ldr r0, [pc, #12] ; 20 <_thum_mode+0xc>
10: e12fff10 bx r0
00000014 <_thum_mode>:
14: 4903 ldr r1, [pc, #12] ; (24 <_thum_mode+0x10>)
16: 6001 str r1, [r0, #0]
18: 4903 ldr r1, [pc, #12] ; (28 <_thum_mode+0x14>)
1a: 6001 str r1, [r0, #0]
1c: 101f1000 andsne r1, pc, r0
20: 00000015 andeq r0, r0, r5, lsl r0
24: 00000032 andeq r0, r0, r2, lsr r0
28: 00000033 andeq r0, r0, r3, lsr r0
Disassembly of section .ARM.attributes:
00000000 <.ARM.attributes>:
0: 00001941 andeq r1, r0, r1, asr #18
4: 61656100 cmnvs r5, r0, lsl #2
8: 01006962 tsteq r0, r2, ror #18
c: 0000000f andeq r0, r0, pc
10: 00543505 subseq r3, r4, r5, lsl #10
14: 01080306 tsteq r8, r6, lsl #6
18: Address 0x0000000000000018 is out of bounds.
我照着书本写的, 基于arm926, 明明切换到了thumb模式。
https://whycan.com/t_5652.html
我之前搞过个类似的屏,我的spi直接强行复用了rgb的数据引脚。你可以设置成rgb666然后只接rgb565,把多余的几个引脚接地就行了,或者刚好复用成软件spi。
咦,好聪明,我怎么没想到呢,浪费了三条腿,捂眼。。。
3.制作 ubifs
Ubifs 的制作需要以下两个命令
mkfs.ubifs: 制作 UBIFS image
ubinize:根据 UBIFS image 制作 ubi.img,这个 ubi.img 是通过 u-boot 直接烧写在 nand flash 分区上的。
AM335x Linux SDK 里面带有制作好的文件系统,是.tar.gz 的压缩文件,可以解压在
一个目录下做为 UBI 文件系统内容,如/home/usr/fs。
GPEVM 板上的 NAND 型号为 MT29F2G08,page size 为 2048B,block size 为
64x2048B=131072B,block count 为 2048。如果制作针对 GPEVM 板的 ubifs,执行
如下两条命令:
1. $ mkfs.ubifs –F -q -r /home/usr/fs -m 2048 -e 126976 -c 2047 -o ubifs.img
参数简介:
-F:使能"white-space-fixup",如果是通过 u-boot 烧写需要使能此功能。
-r:待制作的文件系统目录
-m:NAND FLASH 的最小读写单元,一般为 page size
-e:LEB size,对于 AM335x 的 NAND driver,为 block size-2x(page size)
-c:文件系统所占用的最大 block 数,一般小于等于 block count -1
-o:输出的 ubifs.img 文件
2. $ ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg
参数简介:
-p:block size。
-m:NAND FLASH 的最小读写单元,一般为 page size
-o:输出的 ubi.img 文件
ubinize.cfg 为 ubinize 所需要的配置文件,内容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_size=200MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
4.烧写 ubifs
可通过 u-boot 命令将生成的 ubi.img(25M)烧写到 NAND FLASH 分区上,如下示
例是将 ubi.img 先存储到 SD 卡上,然后通过 u-boot 的 fatload 命令将其拷贝至内存
中。
u-boot# mw.b 0x82000000 0xFF
u-boot# mmc rescan
u-boot# fatload mmc 0 0x82000000 ubi.img
u-boot# nand erase 0x00780000 0xF880000
u-boot# nand write 0x82000000 0x00780000 0x1E00000
5.Linux 启动设置
在 U-boot 下设置启动信息如下:
#setenv bootargs 'console=ttyO0,115200n8 noinitrd ip=off mem=256M
rootwait=1 rw ubi.mtd=7,2048 rootfstype=ubifs root=ubi0:rootfs
init=/init'
以上是转载
ssd201的sdk默认不支持双缓冲,lvgl跑起来有撕裂感,是否有优化方法?
LVGL的linux_frame_buffer项目加入FB双缓
http://whycan.com/t_5887.html
(出处:哇酷开发者社区)
STM8L + PCF8563(I2C)
不得不说, V3s的RTC就是渣渣, 电流10uA, 导致CR2032纽扣电池很快就放完电了, 不得不赶工改用PCF8563或者别的RTC
http://whycan.com/t_3787.html#p34893
(出处:哇酷开发者社区)
这个楼主测得8563电流 0.25uA
Allwinner S3 uboot 2020.01 (开机Logo + LCD + 以太网 + SDC 2)
http://whycan.com/t_3865.html
(出处:哇酷开发者社区)
raspberryman 说:uboot驱动以太网是要烧录吗?
首页» 全志 V3S/F1C100s/X3» V3s/S3/f1c100s通过USB启动Linux,并把SD NAND/TF卡挂载为U盘, 可以dd或Win32DiskImager任烧写
我把我编译得到的u-boot-sunxi-with-spl.bin替换晕哥的文件在线就能运行,但是还是不能识别以太网
Allwinner S3 uboot 2020.01 (开机Logo + LCD + 以太网 + SDC 2)
http://whycan.com/t_3865.html
(出处:哇酷开发者社区)
搞定, 感谢楼主!
以下两个都是Ubuntu LVGL Framebuffer移植:
本站下载: lv_port_linux_frame_buffer.tgz (lvgl7.0) (70M)
本站下载: lv_linux_frame_buffer_v6.tgz (lvgl6.0) (30M)
AD/DXP格式: V3s_Dual_LCD_20210128.7z
PCB有坑,LCD座子那里要扣掉一点
PCB有坑,LCD座子那里要扣掉一点
PCB有坑,LCD座子那里要扣掉一点
两个屏显示一毛一样的内容,估计是食堂售饭机用的。
顺便求下载权限
捂脸.gif
页次: 1