文档参考:Rockchip_Developer_Guide_RK2118_CN.pdf
1、编译和烧录
1、编译CPU固件非常简单,执行下面命令即可:
cd bsp/rockchip/rk2118
scons -j32
2、编译rtt0指令如下,rtt0是2118的主要工作核cpu0,目前只用到这个核
export RTT_EXEC_PATH=$PWD/toolchains/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin
cd bsp/rockchip/rk2118
cp board/evb1_v20/defconfig .config
./build.sh board/evb1_v20/package-file rtt0
3、打包update固件
cd bsp/rockchip/rk2118
./mkimage.sh board/evb1_v20/package-file
4、烧录:插入usb口,按下maskrom按键后上电,出现usb工具后,点升级
5、分区烧录的地址映射关系参考\bsp\rockchip\rk2118\board\evb1_v20\package-file 参数文件:part.txt和parameter.txt文件
自定义脚本如下
2、模块配置
**.config不参与编译,是否生效需要和defconfig.h文件比较
3、频率配置
4、驱动初始化
1、延时函数介绍
2、驱动初始化顺序介绍
5、init开机初始化流程
上面是板级启动流程
单片机启动流程:
1、start.s里面有主函数入口地址
2、开启main线程,硬件初始化。根据函数名称查看初始化模块
int rtthread_startup(void)
{
rt_hw_interrupt_disable();
/* board level initialization
* NOTE: please initialize heap inside board initialization.
*/
rt_hw_board_init();
/* show RT-Thread version */
rt_show_version();
/* timer system initialization */
rt_system_timer_init();
/* scheduler system initialization */
rt_system_scheduler_init();
#ifdef RT_USING_SIGNALS
/* signal system initialization */
rt_system_signal_init();
#endif
/* create init_thread */
rt_application_init();
/* timer thread initialization */
rt_system_timer_thread_init();
/* idle thread initialization */
rt_thread_idle_init();
#ifdef RT_USING_SMP
rt_hw_spin_lock(&_cpus_lock);
#endif /*RT_USING_SMP*/
/* start scheduler */
rt_system_scheduler_start();
/* never reach here */
return 0;
}
3、板级硬件初始化 (rt_hw_board_init)
4、启动app线程 (rt_components_board_init)
void rt_components_board_init(void)
{
const char* lv_start = ".rti_fn.0";
const char* lv_end = ".rti_fn.1.end";
rt_size_t index_i;
int result;
rt_init_objects_sort();
for (index_i = 0; index_i < rt_init_num; index_i++)
{
if (rt_init_table[index_i].fn)
{
if (rt_strcmp(rt_init_table[index_i].level, lv_end) >= 0)
{
break;
}
#if RT_DEBUG_INIT
rt_kprintf("initialize %s", rt_init_table[index_i].fn_name);
result = rt_init_table[index_i].fn();
rt_kprintf(":%d done\n", result);
#else
result = rt_init_table[index_i].fn();
#endif
}
}
}
6、APP流程介绍
1、创建了rkplayer_init主线程。
2、创建子线程,以及子线程的消息队列。
3、主线程接收子线程的消息进行消息分类和转发。
7、问题及调试
1、编译过程中menuconfig不生效问题
拷贝.config到defconfig文件
2、无法添加源:sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
不是rk2118的编译必须的,可以不添加。
3、烧录image文件进不去maskrom模式,需要重装Driverassitant驱动
4、第一种配置io方式 :iomap配置方式如下图
第二种配置io方式 :iomux的配置func需要找到原厂支持。