页次: 1
仔细看了1#帖子,包括参考的晕哥的帖子。重要理解了keil 用gcc编译的问题了。
1. 晕哥指出的Link的问题(我#28楼和这个一样的)
只要用原始的gcc工具肯定是这个问题。核心原因是参数传递的",要改成' 引号。
2. 本帖作者给出了解决方案,而且把修改的完整的sdk放到了项目里面的toolchain里面。
大家如果使用,必须要通过Project -->Manager -->Project Items -->Fold Extention 重新设置工具链的路径。
作者的处理方式可以适合可以工作的版本的gcc,做法是
1. 把原始gcc工具链下的bin\arm-none-eabi-gcc.exe 重名为 arm-none-eabi-gcc.exedebug
2. 把作者发布的项目下的Toolchain\bin\arm-none-eabi-gcc.exe 复制到原始gcc对应的路径下。
作者的 arm-none-eabi-gcc.exe 是一个壳子把参数修改掉,然后重新调用gcc就解决了 Link的错误。
感谢作者给出了这个巧妙的方法,感谢晕哥发现了这个问题。这样的确为开发构建了一个好的环境。
>>*** Error: Failed to execute 'arm-none-eabi-gcc'
我仔细看了 “KEIL可以使用 GNU 工具链,但是只能使用指定那些工具链,不是所有的GNU工具链都可以用” 的说明,感谢里面的贴图指南。我系统的gcc编译器所在的路径错误了。 (历史的原因,存在了一个垃圾路径,欺骗了keil )
linking...
Objects\start.o: In function `_start':
(.text+0x0): multiple definition of `_start'
./objects/start.o:(.text+0x0): first defined here
Objects\start.o: In function `return_to_fel':
D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/start.S:197: multiple definition of `return_to_fel'
./objects/start.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/start.S:197: first defined here
Objects\memcpy.o: In function `memcpy':
D:\EmbeddedPrjs\f1c100s_keil/SRC/arch/arm32/lib/memcpy.S:12: multiple definition of `memcpy'
./objects/memcpy.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/arch/arm32/lib/memcpy.S:12: first defined here
Objects\memset.o: In function `memset':
D:\EmbeddedPrjs\f1c100s_keil/SRC/arch/arm32/lib/memset.S:11: multiple definition of `memset'
./objects/memset.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/arch/arm32/lib/memset.S:11: first defined here
Objects\sys-uart.o: In function `read32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: multiple definition of `sys_uart_init'
./objects/sys-uart.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: first defined here
Objects\sys-uart.o: In function `read32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: multiple definition of `sys_uart_putc'
./objects/sys-uart.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: first defined here
Objects\sys-clock.o: In function `write32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:42: multiple definition of `sys_clock_init'
./objects/sys-clock.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:42: first defined here
Objects\sys-dram.o: In function `sys_dram_init':
D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-dram.c:485: multiple definition of `sys_dram_init'
./objects/sys-dram.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-dram.c:485: first defined here
Objects\sys-mmu.o: In function `sys_mmu_init':
D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-mmu.c:44: multiple definition of `sys_mmu_init'
./objects/sys-mmu.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-mmu.c:44: first defined here
Objects\sys-spi-flash.o: In function `read32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: multiple definition of `sys_spi_flash_init'
./objects/sys-spi-flash.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: first defined here
Objects\sys-spi-flash.o: In function `read32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: multiple definition of `sys_spi_flash_exit'
./objects/sys-spi-flash.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: first defined here
Objects\sys-spi-flash.o: In function `read32':
D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: multiple definition of `sys_spi_flash_read'
./objects/sys-spi-flash.o:D:\EmbeddedPrjs\f1c100s_keil/./SRC/machine/include/io.h:22: first defined here
Objects\sys-copyself.o: In function `sys_copyself':
D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-copyself.c:51: multiple definition of `sys_copyself'
./objects/sys-copyself.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/machine/sys-copyself.c:51: first defined here
Objects\main.o: In function `boot_main':
D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:16: multiple definition of `boot_main'
./objects/main.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:16: first defined here
Objects\main.o: In function `__fatal_error':
D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:75: multiple definition of `__fatal_error'
./objects/main.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:75: first defined here
Objects\main.o: In function `__assert_func':
D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:79: multiple definition of `__assert_func'
./objects/main.o:D:\EmbeddedPrjs\f1c100s_keil/SRC/main.c:79: first defined here
collect2.exe: error: ld returned 1 exit status
".\Objects\f1c100s.elf" - 1 Error(s), 0 Warning(s).
这些Link 的问题有人遇到过吗?
machine/下的xxx.S 文件是明显不存在的,怎么会有这个错误?
不过我编译器的版本比较高,2018/2019的gcc-arm版本。
#ifdef LV_COLOR_DEPTH
#define LCD_PRE_PIXEL LV_COLOR_DEPTH
#elif
#define LCD_PRE_PIXEL 24
#endif
这个代码的确有问题
#ifdef LV_COLOR_DEPTH
#define LCD_PRE_PIXEL LV_COLOR_DEPTH
#else
#define LCD_PRE_PIXEL 24
#endif
所有这些#elif 都修改好,编译成功
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
364396 3964 1179044 1547404 179c8c rtthread.elf
scons: done building targets.
我现在没板子,这个环境还是做的非常赞的!! 谢谢,提供这个方案。
我哪里犯错误了
CC build/applications/main.o
CC build/drivers/board.o
CC build/drivers/drv_clock.o
CC build/drivers/drv_fb.o
drivers/drv_fb.c:25:6: error: #elif with no expression
25 | #elif
| ^
drivers/drv_fb.c:670:27: error: 'LCD_PRE_PIXEL' undeclared here (not in a function)
670 | .bits_per_pixel = LCD_PRE_PIXEL, //24
| ^~~~~~~~~~~~~
scons: *** [build/drivers/drv_fb.o] Error 1
scons: building terminated because of errors.
对1# 的做一个更新:
>>1. 我的USB想接设备测试USB的功能,那板子的电源还应该从哪里提供。
板子USB边上有一个5V, GND,可以作为5V 输入。
>>2. 有现成的固件可以测试吗?
目前我尝试了论坛的几个
1. licheepi0_v3s_bsp_linux_20101221_dump.7z 没有任何输出<<== 后来没有尝试,估计也是好的。(非常可能当时用dd命令写设备有失败的情况)
2. V3s_linux_4_2_0_ov2640_debugdump_20190110 <<==这个的确是好的,而且摄像头可以工作,非常好的一个验证摄像头的程序。
3. PhoenixSuit_CN_debug 工具报告没有和设备连接上,有什么操作要求吗? <<==这个目前还没有尝试,fel 模式都还没有尝试。现在主要依靠更新TF的文件。
lichee zero 的尝试i2c
# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: [ 25.766326] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 27.846321] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 29.926323] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 32.006326] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 34.086333] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 36.166322] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 38.246323] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 40.326324] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 42.406330] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 44.486322] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 46.566369] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- [ 48.646323] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
-- ^C
[ 50.726323] i2c i2c-1: mv64xxx: I2C bus locked, block: 1, time_left: 0
i2c0 看dts tree 是配置了ns2009, i2c1 应该没有接东西,我dts 里面打开了i2c
&i2c1 {
status = "okay";
pinctrl-0 = <&i2c1_pins>;
};&pio {
i2c1_pins: i2c1 {
pins = "PE21", "PE22";
function = "i2c1";
};
};
但是i2c-1 不工作。为什么?
大家都单个的bin文件是如何做的,我现在只能一个一个分区的copy,有现成的脚本可以拼接吗?
这个:V3s_linux_4_2_0_ov2640_debugdump.bin, 我再次尝试了。 这次有vido0。 奇怪了,说明板子是好的。
估计我#38楼道错误是,当时dd 没有成功写入TF卡,TF卡上面倒霉是一个不好的版本。(导致验证出问题.) 选择通过论坛找到了一个可以工作的版本,验证了我的硬件。
我还无法构建出这个版本。dts的编译问题还没有解决。
# fswebcam -S 1 -d /dev/video0 -p UYVY -r 1600x1200 test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
[ 184.074418] cma: cma_alloc: alloc failed, req-size: 938 pages, ret: -12
[ 184.081131] sun6i-csi 1cb4000.csi: dma_alloc_coherent of size 3842048 failed
[ 184.088687] sun6i-csi 1cb4000.csi: Wrong width or height 1600x1200 (800x600 expected)
Error starting stream.
VIDIOC_STREAMON: Broken pipe
Unable to use mmap. Using read instead.
Unable to use read.
# fswebcam -S 1 -d /dev/video0 -p UYVY -r 1280x1024 test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
[ 214.480948] sun6i-csi 1cb4000.csi: Wrong width or height 1280x1024 (800x600 expected)
Error starting stream.
VIDIOC_STREAMON: Broken pipe
Unable to use mmap. Using read instead.
Unable to use read.
800x600可以,继续提升报告没有内存等错误。 这个版本的内部配置的设备比较多。
看了拍摄的照片,全身绿条纹。 奇怪了。
我现在在5.2-y上可以编译,工作,但是设备树没搞定。
modprob 0V2640.ko 看上去也成功的
[23:30:12:071] [ 6.723351] android_usb gadget: high-speed config #1: android␍␊
[23:30:12:071] [ 94.120515] [VFE]cci probe start cci_sel = 0!␍␊
[23:30:12:071] [ 94.125632] [VFE]cci probe end cci_sel = 0!␍␊
[23:30:12:071] [ 94.141273] platform reg-20-cs-ldoio0: Driver reg-20-cs-ldoio0 requests probe deferral␍␊
[23:30:12:093] [ 94.151171] [VFE]cci_init end␍␊
[23:30:12:093] [ 94.164415] platform reg-20-cs-ldo4: Driver reg-20-cs-ldo4 requests probe deferral␍␊
[23:30:12:093] [ 94.204839] platform reg-20-cs-ldo3: Driver reg-20-cs-ldo3 requests probe deferral␍␊
[23:30:12:093] [ 94.229334] platform reg-20-cs-ldo2: Driver reg-20-cs-ldo2 requests probe deferral␍␊
[23:30:12:115] [ 94.238394] platform reg-20-cs-ldo1: Driver reg-20-cs-ldo1 requests probe deferral␍␊
[23:30:12:115] [ 94.247327] platform reg-20-cs-dcdc3: Driver reg-20-cs-dcdc3 requests probe deferral␍␊
[23:30:12:115] [ 94.256419] platform reg-20-cs-dcdc2: Driver reg-20-cs-dcdc2 requests probe deferral␍␊
但是没看到有摄像头出现。 奇怪了,明天要想办法确认摄像头是否好的。
V3S 的套件买了2个摄像头头,一个是 DVP/CSI的排线的。 一个是插针形式的,我估计是MIPI的摄像头。 我买了OV2640 和 OV5640, 我估计MIPI的是OV5640. 我这个理解对吗?
难道是硬件不一样: https://detail.tmall.com/item.htm?id=597397651223&spm=a1z09.2.0.0.5fff2e8dl7Vd03&_u=jjavk7720f
现在的V3S 都这样样子。
非常感谢, 我尝试了 https://whycan.cn/files/202001/wifi_audio_cam_serial_zero.rar
但是/dev/下没有出现video设备。 我的v3s 是刚买的,和这个帖子前面照片的板子不完全一样。 摄像头插入的方法是,和CPU的位置是相反的吧。 就是CPU向上,镜头向下。
还可能什么问题? 启动日志也没有输出发现摄像头。
是的,应该是设备树的问题,但是我没找到.config里面哪里配置默认的设备树? 或者写了设备树以后应该如何编译。
修改过的
./scripts/dtc/dtc -I dts -O dtb -o arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock-csi.dts arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock-csi.dtb
Error: arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock-csi.dts:43.1-2 syntax error
FATAL ERROR: Unable to parse input tree
没有修改过的
./scripts/dtc/dtc -I dts -O dtb -o arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dtb arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts
Error: arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts:43.1-2 syntax error
FATAL ERROR: Unable to parse input tree
命令说明不对,不知道如何处理了。
后来自己根据论坛的帖子,构建了,主要问题是boot.cmd, 参考的cmd里面有2个console 导致无法登录。 去掉一个就好了 。
setenv bootargs console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 earlyprintk rw
load mmc 0:1 0x41000000 zImage
load mmc 0:1 0x41800000 sun8i-v3s-licheepi-zero.dtb
bootz 0x41000000 - 0x41800000
5.2的主线应该是能启动CSI的OV2640, 目前设备里面没有/dev/vide0 这个设备,启动的日志里面也没看到有摄像头的信息。有可能哪里有出现问题?
能在lichee zero 上用吗? 我出现了
## Executing script at 41900000
Wrong image format for "source" command
SCRIPT FAILED: continuing...
starting USB...
No controllers found
USB is stopped. Please issue 'usb start' first.
starting USB...
No controllers found
No ethernet found.
missing environment variable: pxeuuid
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/00000000
No ethernet found.
missing environment variable: bootfile
Retrieving file: pxelinux.cfg/0000000
No ethernet found.
页次: 1