rk2118快速入门

文档参考: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文件

自定义脚本如下
XXX为自定义板级目录,需要自行添加

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需要找到原厂支持。

iomap方式

iomux方式 func选择找原厂获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值