首页 > 其他分享 >创龙瑞芯微RK3568交叉编译(c和驱动module)

创龙瑞芯微RK3568交叉编译(c和驱动module)

时间:2023-10-20 18:00:03浏览次数:41  
标签:芯微 gcc 创龙瑞 文件 RK3568 编译 linux include hello

前言
由于项目需要,接触多个公司的RK3568,正点原子的,创龙的,迅为的。最后选择了创龙的。做了一段时间,发现给的教程和其他参考资料很少。所以必须一点一点得自己试验。以后的文章页会一点一点的写。希望给需要的小伙伴带个路。

资料中
大部分功能在用户资料里面有,小伙伴一步步可以跟着做,仅仅说一般工程需要的。

(1)灯

灯的底层配置已经在设备树中配好了,直接echo就行!

注:开发板的灯在边边上。开始的时候怎么点都不亮,最后才发现灯在边边上,半天没找到。

(2)GPIO

开发板没有直接引出GPIO,引出的都复用其他功能了,这个有点没办法。

注:在class的gpio里面直接export就行,用到了就会busy,用不到就能export。

(3)串口

串口都搞成485和232了,没有TTL电平的。

注:485口是有+和-的,利用485转232或者TTL的时候别接错了。

(4)can

直接根据资料中就可以发送。

注:地址最大只能FFF,多了就没办法了。

测试
(1)编译.c文件gcc

aarch64-buildroot-linux-gnu-gcc
搜寻里面的gcc,有很多个,但是需要用的是这个,后面加上自己的文件名就行。为了方便,直接给个例程:

aarch64-buildroot-linux-gnu-gcc hello.c -o hello
前面hello.c是自己的c文件,注意名字必须全对。虽然编译的是c文件,但是文件名后面最好有后缀。后面的hello是自己输出的名字,这个就随便了。

注:c文件里面头自己添加了线程,交叉编译的时候并不用添加-lthread这个指令。

下面给出具体具体函数:

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include "fcntl.h"
#include <string.h>
#include <net/if.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>

#include "sys/ioctl.h"

int count = 0;
void *thread_fun(void *arg)
{
while(1)
{
printf("led_running\n");
count++;
if(count == 1)
{
system("echo 1 > /sys/class/leds/user-led0/brightness");
system("echo 0 > /sys/class/leds/user-led1/brightness");
}
if(count == 2)
{
system("echo 0 > /sys/class/leds/user-led0/brightness");
system("echo 1 > /sys/class/leds/user-led1/brightness");
}
if(count == 2)count = 0;
sleep(1);
}
}

int main()
{
pthread_t tid;
if (pthread_create(&tid, NULL, thread_fun, (void *)(&tid)) != 0)
{
perror("pthread_led_create error");
exit(1);
}
else
{
printf("led thread open correct\n");
}
pthread_join(tid,NULL);
}

这个就是点灯函数,由于gpio没有办法引出来,所以只能用系统函数凑合。如果是真正的gpio,还需要在开始的时候export,这个是没办法的。

(2)编译驱动ko文件

网上查询了好多,结果都不能用,都没办法编译出ko文件,不是这错就是那错。最后才给弄出来。

先来主函数myhello.c:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

static int __init hello_init(void)
{
printk(KERN_INFO "%s : enter\n", __func__);
return 0;
}

static void __exit hello_exit(void)
{
printk(KERN_INFO "%s : enter\n", __func__);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("wang");
MODULE_DESCRIPTION("hello");
MODULE_LICENSE("GPL");
这个是最简单的驱动函数,网上的教程很多,这个就不多说了。

下面是make文件

注:记住名字一定得是Makefile,其他的不行;

注:里面的一定要自己敲,分清楚Tab和空格,切记。要不编译不过去。具体可以看看makefile怎么编写的,有现成的也不能直接用,复制过去的格式已经变了。

MVTOOL_PREFIX = /home/wang/RK3568/rk356x_linux_release_v1.3.1_20221120/buildroot/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-gcc
CROSS_COMPILE= $(MVTOOL_PREFIX)
KDIR := /home/wang/RK3568/rk356x_linux_release_v1.3.1_20221120/kernel


TARGET =myhello
EXEC = $(TARGET)
obj-m :=$(TARGET).o
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c .tmp_versions $(TARGET)
其中:

MVTOOL_PREFIX:gcc的位置,这个搞了很久,还用另一个gcc的,也能编译过去,但是不敢保证最后是对的。aarch64-none-linux-gnu-gcc,并且位置不一样。

注:存放位置一定要自己改写,从rk356x_linux_release_v1.3.1_20221120之后是一定的,前面的需要改到自己的位置。

KDIR:内核的位置。这个和上面一样,前面的位置不一样,必须添加/kernel,如果不添加会报错。

TARGET:你的文件名字。

注:你的文件是xxx.c,这个是去掉.c之后的名字。中间生成有其他文件,名字也是这个,但是后缀不一样。所以必须这个地方必须是你文件的名字,不加后缀。

下面是编译指令:

make ARCH=arm64
注:这里后面的架构名称必须加上。这个地方卡了很久。其他平台上我都试验了,龙芯上,A40i上,正点原子的其他开发板上都试验了,都没啥问题。仅仅在这里出现一大堆错误。原来这个地方需要加上后面。记住直接make是不行的。

结语
Linux的文件就这样,坑非常多,一点注意不到就不行了。后面会一点点的给大家写创龙的瑞芯微RK3568的知识。如果需要经常关注的小伙伴可以关注公众号,具体的翻看前面的文章,里面有具体的二维码。
————————————————
版权声明:本文为CSDN博主「翱翔的灿烂」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45426095/article/details/133905671

 

标签:芯微,gcc,创龙瑞,文件,RK3568,编译,linux,include,hello
From: https://www.cnblogs.com/im18620660608/p/17777643.html

相关文章

  • 瑞芯微RK3568核心板在边缘服务器产品中的应用-迅为电子
    瑞芯微RK3568核心板在边缘服务器产品中的应用-迅为电子    迅为RK3568核心板在边缘服务器产品中可以发挥关键作用,为边缘计算应用提供高性能的计算和多媒体处理能力。边缘服务器通常用于处理和存储数据,执行本地计算任务,并支持与远程云服务的通信。以下是RK3568核心板在边缘服务......
  • RK3568的NPU/GPU/CPU频率使用率
    1输入以下命令挂载debug,只有挂载debug才可以查看NPU/GPU/CPU频率使用率。mount-tdebugfsdebugfs/sys/kernel/debugmount|grepdebug2输入以下命令查看NPU频率:cat/sys/kernel/debug/clk/clk_scmi_npu/clk_rate3查看GPU频率,输入以下命令cat/sys/kernel/de......
  • 瑞芯微 | 如何固定以太口地址为指定ip?ifplugd妙用
    rxw的RK3568的evb1公板,有2个以太口,默认UI界面只能配置eth0,无法配置eth1,实际应用中,有时需要一旦有网线插入,就需要该地址设置为指定IP地址。本文介绍2个最简单的方法实现固定IP。一、通过修改ipconfig.txt安卓设备以太口的配置信息保存在以下文件中:/data/misc/ethernet/ipconf......
  • 瑞芯微RK3568|SDK开发之Buildroot编译
    1. Buildroot手动编译1.1       Buildroot查询帮助查看buildroot的详细编译命令,如下所示。图1.1编译文件系统以上命令为,配置buildroot对应的默认配置defconfig,然后编译。注:buildroot编译只需留在SDK根目录下,不需要进入到buildroot文件夹内。 1.2       Bui......
  • 迅为RK3568核心板在智能家居控制器产品中的应用
    迅为RK3568核心板在智能家居控制器产品中可以发挥关键作用,为智能家居系统提供高性能的计算和多媒体处理能力,以实现更智能、更便捷、更互联的家居体验。以下是RK3568核心板在智能家居控制器产品中的应用方案:智能家居中心:RK3568核心板可以作为智能家居中心的核心,用于控制和协调各种智......
  • 迅为RK3568核心板在智能家居控制器产品中的应用方案
     迅为RK3568核心板在智能家居控制器产品中可以发挥关键作用,为智能家居系统提供高性能的计算和多媒体处理能力,以实现更智能、更便捷、更互联的家居体验。以下是RK3568核心板在智能家居控制器产品中的应用方案: 智能家居中心:RK3568核心板可以作为智能家居中心的核心,用于控制和......
  • “国产双系统”出炉,RK3568J非对称AMP:Linux+RTOS/裸机
    “非对称AMP”双系统是什么AMP(AsymmetricMulti-Processing),即非对称多处理架构。“非对称AMP”双系统是指多个核心相对独立运行不同的操作系统或裸机应用程序,如Linux+RTOS/裸机,但需一个主核心来控制整个系统以及其它从核心。每个处理器核心相互隔离,拥有属于自己的内存,既可各......
  • 瑞芯微RK3568|SDK开发之Kernel编译
    1. Kernel手动编译1.1       kernel查询帮助 使用./build.sh -h kernel查看kernel的详细编译命令如下所示。图1.1编译内核 上图表示,单独编译kernel固件分为三步,进入kernel目录,选择默认配置文件,编译镜像。 1.2       kernel默认配置对应平台的默认配置文件由./b......
  • 瑞芯微RK3568|SDK开发之Kernel编译
    1. Kernel手动编译1.1       kernel查询帮助 使用./build.sh -h kernel查看kernel的详细编译命令如下所示。图1.1编译内核 上图表示,单独编译kernel固件分为三步,进入kernel目录,选择默认配置文件,编译镜像。 1.2       kernel默认配置对应平台的默认配......
  • 瑞芯微RK3568|SDK开发之环境安装及编译操作
    1. SDK简介一个通用 Linux SDK 工程目录包含有buildroot、app、kernel、device、docs、external 等目录。其中一些特性芯片如RK3308/RV1108/RV1109/RV1126等,会有所不同。● app:存放上层应用 app,主要是 qcamera/qfm/qplayer/settings 等一些应用程序。● buildroot:基......