当前位置: 首页 产品详细

rk3568编译内核源码

专业编程培训机构——完成蜕变以后轻松拿高薪

电话+V:192606-48052 ,欢迎咨询rk3568编译内核源码,[python实用课程],[C++单片机原理],[C#网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]

一、瑞芯微RK3568|SDK开发之Buildroot编译

欲手动编译瑞芯微RK3568的SDK,需先查询建制root的帮助,操作命令为配置buildroot对应的默认配置(defconfig),然后进行编译。只需留在SDK根目录下,不必进入buildroot文件夹。

对应平台的默认配置文件由./build.shlunch操作中选择的mk文件决定。配置完成后,查看device/rockchip/rk356x/BoardConfig-rk3568-evb1-ddr4-v10.mk文件,由RK_CFG_BUILDROOT决定。

导入指定的默认配置,操作命令为sourceenvsetup.shrockchip_rk3568,进入menuconfig修改buildroot配置。进入配置界面,输入“/”进行搜索功能查找所需目标配置。使用空格键修改配置,按ESC键退出menuconfig。

在修改默认配置前,备份旧的配置。输入命令cpconfigs/rockchip_rk3568_defconfigconfigs/rockchip_rk3568_defconfig_bak和cpconfigs/rockchip_rk356x_recovery_defconfigconfigs/rockchip_rk356x_recovery_defconfig_bak进行备份。若需修改busybox配置,如添加depmod,可使用makebusybox-menuconfig进入配置界面,按y勾选并保存退出。

备份并更新原先的busybox.config。执行cpboard/rockchip/common/base/busybox.configboard/rockchip/common/base/busybox.config.bak和cpoutput/build/busybox-1.27.2/.configboard/rockchip/common/base/busybox.config操作。重新编译busybox,命令为makebusybox-rebuild。

二、基于RK3568的内部定时器应用示例

内核定时器是内核用来控制在未来某个时间点调度执行某个函数的一种机制,它在kernel/linux/timer.h和kernel/timer.c文件中实现。被调度的函数是异步执行的,类似于一种“软件中断”,在非进程的上下文中运行,因此调度函数必须满足以下规则:没有current指针、不允许访问用户空间、不能执行休眠(或可能引起休眠的函数)和调度,任何被访问的数据结构都应该针对并发访问进行保护以防止竞争条件。在SMP系统中,调度函数总是在注册它的同一CPU上运行,以尽可能获得缓存的局域性。

以下是一个RK3568蜂鸣器定时鸣叫的驱动示例代码,包括了必要的头文件引用和定义,以及具体的代码实现:

c

#includekernel.h>

#includeinit.h>

#includemodule.h>

#includetimer.h>

#includegpio.h>

#includeslab.h>

#includedelay.h>

#defineGPIO_PIN15//替换为你的GPIO引脚

staticstructtimer_listtimer;

intgpio_status=1;

staticvoidtimer_callback(structtimer_list*t){

gpio_set_value(GPIO_PIN,gpio_status);

gpio_status=!gpio_status;

mod_timer(timer,jiffies+msecs_to_jiffies(1000));//1秒后再次触发定时器

}

staticint__initmymodule_init(void){

intret;

ret=gpio_request(GPIO_PIN,"my_gpio");

if(ret){

printk("无法请求GPIO%d",GPIO_PIN);

returnret;

}

gpio_direction_output(GPIO_PIN,0);

timer_setup(timer,timer_callback,0);

mod_timer(timer,jiffies+msecs_to_jiffies(2000));//2秒后触发定时器

return0;

}

staticvoid__exitmymodule_exit(void){

del_timer_sync(timer);

gpio_free(GPIO_PIN);

}

module_init(mymodule_init);

module_exit(mymodule_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("zou");

MODULE_DESCRIPTION("SampleGPIOandTimerInterruptKernelModule");

rk3568应用代码编译与测试

2023-08-28 16:51·华科智能-刘光华rk3568应用代码编译与测试

1.问题提出

在开发板上,经常需要写一些测试应用程序,来验证驱动程序,是否正常运行。这就需要在PC上的虚拟机下,编写应用程序,然后编译应用,最终要将编译好的应用程序,传入开发板,在开发板上执行运行。

刚开始我用arm-linux-gnueabihf编译出来的程序,在开发板上,总是显示“notfound”


思路:PC端编译出来的X86架构的可执行程序要在arm开发板上运行应用程序,需要交叉编译工具,又因为rk3568是arm64位cpu,我们需要64位的交叉编译工具。刚开始用arm-linux-gnueabihf是32位的,所以编译出来的程序,在开发板上,总是显示“notfound”

为解决此问题,花费了一个下午,特整理出来,希望又遇到此问题能节省时间~


2.操作步骤

step1C/C++交叉编译环境配置

1)下载交叉编译工具

地址:
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/


下载后的文件,可以拷贝到虚拟机下你的sdk下(不知道如何从windows拷贝到虚拟机,可以查看,我之前分享的一篇文章:VMware虚拟机竟然会吃掉这么多磁盘空间?-今日头条(toutiao.com)中的第二节《建立Vmware虚拟机与windows文件共享》)

2)解压

tar-xvfgcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar

解压结构如下

在该目录的bin下面会看到交叉编译工具

3)用交叉编译工具,编译测试应用程序

编写完应用程序代码,使用如下指令编译:

$aarch64-linux-gnu-gccpwm-testAPP-opwm-test

提示需要安装交叉编译工具,按照提示安装

编译后查看文件格式如下

4)通过ADB把编译后的应用程序拷贝到开发板运行(可以参考我的另一篇文章如何使用adb调试工具,与linux设备互传文件-今日头条(toutiao.com)

由于我们的开发板,没有wifi和ethnet,不能通过NFS来传输,只能通过ADB传输,或用U盘拷贝,这个方法太low了。

  • 在PC端,将要传输的文件放在d盘根目录(其它位置也行,只是为了方便操作)
  • 在PC端打开ADB工具如下图
  • 从D盘根push到开发板的下用如下命令,会提示一个文件pushed
  • .\adbpush--syncD:\pwm-test./


  • 进入开发板查看.\adbshell已经拷贝到开发板了
  • 查看下开发板中pwm-test的操作属性,要可以执行ls-l
  • 运行应用程序./pwm-test
  • 根据打印信息,调试代码,直到验证正确

    分享是一种美德,希希望能帮助到Linux嵌入式开发的朋友们,喜欢的动动你发财的小手,帮忙点赞转发,谢谢~

    【WINDRISES EMPLOYMENT PROGRAMMING】尊享对接老板

    电话+V:192606-48052

    机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。

    rk3568编译内核源码
    发布人:mojex123 发布时间:2024-11-08