WhyCan Forum(哇酷开发者社区)

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

您尚未登录。

#1 2020-03-15 16:52:52

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

请各位大神帮忙解惑,我刚接触这个芯片不久,用的是荔枝派Nano,在使用RTThread开发时,
要先烧录RT的bootloader(rtboot-1.0.3.bin),然后用官方ENV工具编译生成的bin再用
rt_ota_packaging_tool工具打包成rbl文件,然后再让F1C100s重启进入bootloader模式,
用PersimmonModConfigTool恢复App的方式更新app。。。过程繁琐不说,由于启动时要经过RT
的bootloader过程,就算把bootloader配置成0延时,最后进APP也差不多经过1秒,重点是,
在进bootloader阶段时LCD的背光总要闪一下,强迫症让我非常难以接受,就想干掉这个
bootloader的过程,上电后直接跑应用程序不是更好吗?

我的开发都是从RTThread官网上下载的ENV工具和RTThread源码,源码BSP中包含有allwinner_tina,
因此就都在此基础上进行开发,编译后能正常生成bin文件,但这个bin文件不能直接烧录,还得打包成rbl文件,
再用恢复工具恢复,这样我压根就不知道这个bin烧录到了Flash具体什么位置。。因我是新手对于F1C100s的
启动过程一无所知,我就希望这个生成的bin能直接烧录到Flash 0地址,然后上电就启动不就最好?

后来在网上看到了很多大神裸奔F1C100s的帖子,还有Keil下的工程,于是我就想自己来摸索一下。
既然RTThread生成了bin了,那么应该只是前面引导的问题,只要把引导加到这个bin文件上,
应该可以直接上电就跑起来吧?于是我重点就移植启动文件start_gcc.S以及链接文件link.lds,
参考的是 https://whycan.cn/t_3645.html 这位大神提供的Keil工程文件中的启动代码和分散加载文件,
一开始只是把Keil工程的启动代码中的Bootloader头信息加到了我的启动代码中,编译后,
用mksunxi.exe工具修改了bin文件校验信息,然后满怀希望的把这个bin文件烧录到Flash地址0的区域(感谢迪卡大神的DKTool),

然而板子没有任何反应,但应该是识别到了Flash中的启动信息,因为没有进FEL了。于是我再参考Keil工程,
一步步把Keil的启动文件一个个的加到我的启动代码(这里有一点不清楚的是Sys-CopySelf之类的有什么用途,
难道不是由BOOTROM完成的代码拷贝到DDR吗。。),但加完了都不启动,啥信息都不输出。。

附上我修改后的启动代码和链接文件,请大神帮忙看看,为啥不能直接启动运行程序,
难道RTThread源码包编译后的bin程序,一定得由RTBoot引导才能运行吗?另外我还有疑问,
手册上写DDR1的地址是从0x80000000开始的,然后RTThread的bootloader启动APP时的
信息是Start app from 0x80000000,那我就很郁闷了,假如这个bootloader是完成了把app
程序加载到DDR的0x80000000区域,那么这个bootloader程序,是在哪个区域运行的???
自己覆盖了自己??还有这个bootloader是由BOOTROM拷贝到DDR中运行的吧?
还是直接从Flash中运行的??

希望有大神帮忙答疑解惑,已经困扰2天了,谢谢!

start+link.rar

离线

#2 2020-03-15 20:17:01

staunchheart
会员
注册时间: 2019-12-17
累计积分: 180

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

单就RTT来说,可以参考
https://whycan.cn/t_3538.html
这个贴子,这个贴子里有boot和bin这些,可以直接GIT代码编译,用的是GCC。
至于将boot与bin合在一起应该也是可以的,我没有搞过.

离线

#3 2020-03-16 16:35:36

微凉VeiLiang
会员
注册时间: 2018-10-28
累计积分: 354
个人网站

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

不是bootrom拷贝到ddr
BootRom会把SRAM大小的代码从启动介质复制到SRAM。然后跳到sram运行
所以需要boot代码把ddr初始化,复制app的代码到ddr,跳到ddr运行
xboot启动就是一体的,可以参考xboot做法,固定把一些启动相关的代码通过link script固定放在spi前面,然后有判断运行时候的代码是否和link地址一致,这样去做到boot和app一体的

离线

#4 2020-03-16 17:33:18

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

感谢楼上大神的解惑,大致搞明白了BROM,SPL等的关系
现在我换了一种方式,由于RTThread的bootloader启动不可控,我就想写一个boot来代替RTT的bootloader,再分析Keil裸机工程,其实也就是一个Bootloader+App的结合体,于是正好借用其Bootloader部分,于是我做了如下修改:
1.修改sys-copyself.c中拷贝数据的代码为从地址0x33000开始加载1024KB数据到地址0x80000000中【RTT Bootloader默认app存放地址为0x33000】
sys_spi_flash_read(0x33000, 0x80000000, 1024*1024);
2.修改启动代码,把拷贝数据结束后跳转到_main的直接改为跳转到0x80000000中执行
原来的:
    /* Call _main */
    ldr r1, =_main
    mov pc, r1
_main:
    mov r0, #1;
    mov r1, #0;
    bl boot_main
    b _main

修改后:
    /* Call _app */
    mov r0, #1;
    mov r1, #0;
    ldr pc, =0x80000000   
    b .
3.编译这个keil工程并烧录到地址0区域
4.在ENV工具下编译RTThread工程,用DKTool将生成的bin直接烧录到0x33000区域
上电启动后,RTThread可以被加载运行,打印出了version信息,但却没有正常进入调度。整个运行过程打印信息如下:

Boot to SPI mode

\ | /
- RT -     Thread Operating System
/ | \     4.0.2 build Mar 13 2020
2006 - 2019 Copyright by rt-thread team
程序到这里就停止了,经过排查,发现RTT在启动调度前都是正常运行的,启动调度即调用rt_system_scheduler_start()后,调度没有正常起来。怀疑是中断向量不正确导致的没能正常进入上下文切换,有没有大神可以帮忙解惑一下,是boot过程直接跳转地址带来的问题,还是RTT的app必须还是得由RTT自己的bootloader来加载才行?还是什么原因导致调度不正常?

最近编辑记录 ntmusic (2020-03-16 17:34:11)

离线

#5 2020-03-16 17:47:31

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

问题解决了,把Keil工程中启动代码中的irq和fiq代码删除就可以正常启动RTThread的app了。。。。虽然不知道为啥,但确实是可以了

离线

#6 2020-03-17 08:13:59

staunchheart
会员
注册时间: 2019-12-17
累计积分: 180

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

ntmusic 说:

问题解决了,把Keil工程中启动代码中的irq和fiq代码删除就可以正常启动RTThread的app了。。。。虽然不知道为啥,但确实是可以了

这个问题我也遇到了。。我的工程用GCC编译没问题,用MDK编译后rt_system_scheduler_start()卡了。
一直没有找到原因,这段时间在搞声音驱动,所以一直没管这事。你这个贴子对非常有意义,希望与你一起研究。
希望可以跟你加QQ。

https://gitee.com/zhangheyang/f1c100s_rt-thread
然后从RTT中找到对应的start_rvds.S  context_rvds.S
修改几处代码后就可以
set RTT_CC=keil
set RTT_EXEC_PATH=D:/develop/Hardware/Keil_v5
scons

最近编辑记录 staunchheart (2020-03-17 08:18:11)

离线

#7 2020-03-17 17:28:27

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

staunchheart 说:

这个问题我也遇到了。。我的工程用GCC编译没问题,用MDK编译后rt_system_scheduler_start()卡了。
一直没有找到原因,这段时间在搞声音驱动,所以一直没管这事。你这个贴子对非常有意义,希望与你一起研究。
希望可以跟你加QQ。

https://gitee.com/zhangheyang/f1c100s_rt-thread
然后从RTT中找到对应的start_rvds.S  context_rvds.S
修改几处代码后就可以
set RTT_CC=keil
set RTT_EXEC_PATH=D:/develop/Hardware/Keil_v5
scons

还是想把boot跟RTT整合到一起,今天抽空再次把bootloader程序和RTT工程链接到一起,是可以正常启动了,但运行不正确,一旦启动调度就出错
Boot to SPI mode

\ | /
- RT -     Thread Operating System
/ | \     4.0.2 build Mar 13 2020
2006 - 2019 Copyright by rt-thread team
Execption:
r00:0x808007e4 r01:0x00000000 r02:0x00000024 r03:0x00000080
r04:0x00000000 r05:0x00000000 r06:0x80800958 r07:0xffffffff
r08:0x0000005a r09:0x00000024 r10:0x80800904
fp :0x00000000 ip :0x00000000
sp :0x800761c4 lr :0x80000940 pc :0x80000940
cpsr:0x20000013
undefined instruction
thread - main stack:
thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
估计是堆栈之类的没搞对,还得再仔细琢磨

离线

#8 2020-03-17 19:15:44

staunchheart
会员
注册时间: 2019-12-17
累计积分: 180

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

ntmusic 说:

还是想把boot跟RTT整合到一起,今天抽空再次把bootloader程序和RTT工程链接到一起,是可以正常启动了,但运行不正确,一旦启动调度就出错
Boot to SPI mode

\ | /
- RT -     Thread Operating System
/ | \     4.0.2 build Mar 13 2020
2006 - 2019 Copyright by rt-thread team
Execption:
r00:0x808007e4 r01:0x00000000 r02:0x00000024 r03:0x00000080
r04:0x00000000 r05:0x00000000 r06:0x80800958 r07:0xffffffff
r08:0x0000005a r09:0x00000024 r10:0x80800904
fp :0x00000000 ip :0x00000000
sp :0x800761c4 lr :0x80000940 pc :0x80000940
cpsr:0x20000013
undefined instruction
thread - main stack:
thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
估计是堆栈之类的没搞对,还得再仔细琢磨

rt_system_scheduler_start()这个卡死,你具体是改了哪个地方呢?

离线

#9 2020-03-17 20:42:16

ljbfly
会员
注册时间: 2017-12-07
累计积分: 36

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

传一下源码看看

离线

#10 2020-03-18 17:22:58

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

staunchheart 说:

rt_system_scheduler_start()这个卡死,你具体是改了哪个地方呢?

我现在是先用keil工程生成一个bootloader.bin,还没把boot+app一起编译。之前这样做也会卡在rt_system_scheduler_start(),后来我把bootloader中的irq和fiq代码删掉就可以了。现在吧boot跟app一起编译时,又出现卡在rt_system_scheduler_start()的情况了

离线

#11 2020-03-19 08:36:27

staunchheart
会员
注册时间: 2019-12-17
累计积分: 180

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

ntmusic 说:

我现在是先用keil工程生成一个bootloader.bin,还没把boot+app一起编译。之前这样做也会卡在rt_system_scheduler_start(),后来我把bootloader中的irq和fiq代码删掉就可以了。现在吧boot跟app一起编译时,又出现卡在rt_system_scheduler_start()的情况了

好的,我照你的说法搞一下。。
我用GCC编译都OK,用MDK就会卡在这里,当然我的boot是独立的。

离线

#12 2020-03-19 11:54:00

ntmusic
会员
注册时间: 2020-02-24
累计积分: 43

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

发现自己走了好多弯路,其实裸跑的Keil工程的启动文件可以直接嫁接到RTT的启动文件中,之前一直没成功是想太多了,现把我能用的代码放上,供参考。
开发环境:windows
开发工具:RT ENV
RT版本: 4.0.2
测试工程基于RT源码中BSP中的allwinner_tina系列,将附件解压至BSP目录下,scons一下即可完成编译。下载程序时,让F1C100s进入FEL模式,运行批处理flashtospi.bat即可完成程序下载。
如果要用在别的工程中,只需进行如下操作:(均指在ENV开发工具和RT源码结构中)
1.拷贝bootloader文件夹、tools文件夹、flashtospi.bat文件到对应工程目录下
2.用示例代码的link.lds链接文件替换掉工程的链接文件
3.用示例代码的libcpu\start_gcc.S启动文件替换掉工程的启动文件
进行如上操作后即可实现秒启动APP了(当然也不是秒启动,FEL过程还是费了大概0.几秒的时间,但相对用RT boot来说就快多了)
allwinner_tina_autoboot.rar

最近编辑记录 ntmusic (2020-03-19 11:55:20)

离线

#13 2020-04-20 14:16:16

天道酬勤
会员
注册时间: 2020-01-02
累计积分: 22

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

感谢楼主填坑,下载看看

离线

#14 2020-04-21 08:50:39

642242855
会员
注册时间: 2019-10-31
累计积分: 123

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

这个不错,试试效果

离线

#15 2020-05-03 20:27:48

rdghx
会员
注册时间: 2020-05-03
累计积分: 13

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

楼主很有钻研精神呀,厉害

离线

#16 2020-05-05 07:16:22

kxhui
会员
注册时间: 2020-02-07
累计积分: 1

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

正在研究RTT,下载看看

离线

#17 2020-05-08 20:40:27

Space
会员
注册时间: 2020-04-29
累计积分: 8

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

参考一下。似乎不好入门啊。而且还要有有意义的回复,我都不会怎么有意义啊

离线

#18 2020-05-08 21:05:39

Space
会员
注册时间: 2020-04-29
累计积分: 8

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

ntmusic 说:

发现自己走了好多弯路,其实裸跑的Keil工程的启动文件可以直接嫁接到RTT的启动文件中,之前一直没成功是想太多了,现把我能用的代码放上,供参考。
开发环境:windows
开发工具:RT ENV
RT版本: 4.0.2
测试工程基于RT源码中BSP中的allwinner_tina系列,将附件解压至BSP目录下,scons一下即可完成编译。下载程序时,让F1C100s进入FEL模式,运行批处理flashtospi.bat即可完成程序下载。
如果要用在别的工程中,只需进行如下操作:(均指在ENV开发工具和RT源码结构中)
1.拷贝bootloader文件夹、tools文件夹、flashtospi.bat文件到对应工程目录下
2.用示例代码的link.lds链接文件替换掉工程的链接文件
3.用示例代码的libcpu\start_gcc.S启动文件替换掉工程的启动文件
进行如上操作后即可实现秒启动APP了(当然也不是秒启动,FEL过程还是费了大概0.几秒的时间,但相对用RT boot来说就快多了)
allwinner_tina_autoboot.rar

大佬,开机好多错误提示,这是什么意思?
msh />[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 8 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 5 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m

离线

#19 2020-05-08 22:30:17

stephone
会员
注册时间: 2019-10-09
累计积分: 21

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

你都跑KEIL了,不可以仿真一下吗?

离线

#20 2020-05-08 22:53:48

jxcclij
会员
注册时间: 2020-04-02
累计积分: 4

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

学习中,想用F1C200S做车牌识别,是否可行

离线

#21 2020-05-09 15:51:02

gzc1017
会员
注册时间: 2020-05-09
累计积分: 7

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

感谢楼主分享,正是我想学习的

离线

#22 2020-06-18 10:31:28

Calcium
会员
注册时间: 2018-10-29
累计积分: 9

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

哇 发现好多大佬, 正想入门F1C100s  网上都没资料   幸好发现这个都是有这个论坛.

离线

#23 2020-07-02 19:43:46

逗倪豌儿
会员
注册时间: 2020-06-09
累计积分: 21

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

我好想也碰见了这样的错误
你的flash是什么型号,我的是xt25f128b

Space 说:

大佬,开机好多错误提示,这是什么意思?
msh />[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 8 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 5 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m

离线

#24 2020-07-03 08:30:27

Calcium
会员
注册时间: 2018-10-29
累计积分: 9

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

逗倪豌儿 说:

我好想也碰见了这样的错误
你的flash是什么型号,我的是xt25f128b

把SDIO驱动关了应该就没有了

离线

#25 2020-07-07 11:02:41

foreversun
会员
注册时间: 2020-07-01
累计积分: 7

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

发现好多大佬, 正想入门F1C100s,网上都没资料,跟着学习

离线

#26 2020-07-08 13:50:11

wuwuw
会员
注册时间: 2020-07-08
累计积分: 2

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

请问楼主按最后这样三缓冲操作,确实消除了图形边缘闪烁和保证刷新率稳定60fps吗?

离线

#27 2020-07-10 15:30:59

pww
会员
注册时间: 2020-07-10
累计积分: 2

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

大佬,开机好多错误提示,这是什么意思?
msh />[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 8 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 5 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 55 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m
[31m[E/MMC] [err]:0x00000100,  RTO[0m
[31m[E/MMC] mmc cmd 1 err[0m

离线

#28 2020-09-12 08:19:31

david
会员
注册时间: 2018-03-05
累计积分: 72

Re: F1C100s在使用RThread时如何不经过RT bootloader直接运行app?

ntmusic 说:

发现自己走了好多弯路,其实裸跑的Keil工程的启动文件可以直接嫁接到RTT的启动文件中,之前一直没成功是想太多了,现把我能用的代码放上,供参考。
开发环境:windows
开发工具:RT ENV
RT版本: 4.0.2
测试工程基于RT源码中BSP中的allwinner_tina系列,将附件解压至BSP目录下,scons一下即可完成编译。下载程序时,让F1C100s进入FEL模式,运行批处理flashtospi.bat即可完成程序下载。
如果要用在别的工程中,只需进行如下操作:(均指在ENV开发工具和RT源码结构中)
1.拷贝bootloader文件夹、tools文件夹、flashtospi.bat文件到对应工程目录下
2.用示例代码的link.lds链接文件替换掉工程的链接文件
3.用示例代码的libcpu\start_gcc.S启动文件替换掉工程的启动文件
进行如上操作后即可实现秒启动APP了(当然也不是秒启动,FEL过程还是费了大概0.几秒的时间,但相对用RT boot来说就快多了)
allwinner_tina_autoboot.rar

楼主辛苦,这代码很有参考价值,谢谢。不过这套代码只支持gcc对吧,我用keil的时候说Please make sure your toolchains is GNU GCC!。

离线

页脚

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