RZ/G2L添加新的内核模块

原创 瑞萨MCU小百科 2024-01-04 12:00


RZ/G2L Linux系统的镜像基于yocto构建,本篇介绍如何添加新的内核模块。

方式1:内核源码外添加

方式2:内核源码中添加














需要提前已按照文档构建好开发环境和安装SDK,本篇依据G2L VLP3.0.3,您可点击文末阅读原文或复制下方链接到浏览器中打开获取。

https://www.renesas.cn/cn/zh/document/rln/rzg-verified-linux-package-v303-release-note-0


方式1示例



A. bitbake编译模块方式

目录和内容参考:

左右滑动查看完整内容

rzg2l_vlp_v3.0.3$ tree meta-renesas/meta-rz-common/recipes-kernel/kernel-module-helloworld/meta-renesas/meta-rz-common/recipes-kernel/kernel-module-helloworld/├── files│   ├── helloworld.c│   └── Makefile└── kernel-module-helloworld.bb


helloworld.c

左右滑动查看完整内容

#include static int  hello_world_init(void){    printk("Hello world\n");    return 0;}static void  hello_world_exit(void){    printk("Bye world\n");}module_init(hello_world_init);module_exit(hello_world_exit);MODULE_LICENSE("GPL v2");


Makefile

左右滑动查看完整内容

obj-m := helloworld.oSRC := $(shell pwd)all:        make -C $(KERNELSRC)  M=$(SRC) modulesinstall:        make -C $(KERNELSRC)  M=$(SRC) modules_installclean:        rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c        rm -f Module.markers Module.symvers modules.order        rm -rf .tmp_versions Modules.symvers


kernel-module-helloworld.bb

左右滑动查看完整内容

SRC_URI = " \    file://helloworld.c \    file://Makefile \"S = "${WORKDIR}"EXTRA_OEMAKE = "KERNELDIR=${STAGING_KERNEL_BUILDDIR}"EXTRA_OEMAKE += "CROSS_COMPILE=${CROSS_COMPILE}"
KERNEL_MODULE_PACKAGE_SUFFIX = ""do_install() {    # Create destination directory    install -d ${D}/lib/modules/${KERNEL_VERSION}/extra/
   # Install kernel module    install -m 644 ${S}/helloworld.ko ${D}/lib/modules/${KERNEL_VERSION}/extra/
   # Install module symbol file    install -m 644 ${S}/Module.symvers ${STAGING_KERNEL_BUILDDIR}/helloworld.symvers}PACKAGES = " \    ${PN} \"FILES_${PN} = " \    /lib/modules/${KERNEL_VERSION}/extra/helloworld.ko \


编译模块:

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3$ source poky/oe-init-build-env### Shell environment set up for builds. ###
You can now run 'bitbake '
Targets are:    core-image-minimal    core-image-bsp    core-image-weston    core-image-qthank@rz:~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l bitbake -s | grep hellogo-helloworld                                         :0.1-r0kernel-module-helloworld                              :1.0-r0lib32-go-helloworld                                   :0.1-r0hank@rz:~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l bitbake kernel-module-helloworldWARNING: Layer qt5-layer should set LAYERSERIES_COMPAT_qt5-layer in its conf/layer.conf file to list the core layer names it is compatible with.WARNING: Layer qt5-layer should set LAYERSERIES_COMPAT_qt5-layer in its conf/layer.conf file to list the core layer names it is compatible with.Loading cache: 100% NOTE: Tasks Summary: Attempted 650 tasks of which 635 didn't need to be rerun and all succeeded.


查看结果:

左右滑动查看完整内容

build/tmp/work/smarc_rzg2l-poky-linux/kernel-module-helloworld/1.0-r0/helloworld.ko


如果想编译到rootfs,请修改conf/local.conf追加内容并重新编译rootfs

左右滑动查看完整内容

MACHINE_EXTRA_RRECOMMENDS = " kernel-module-helloworld"


库文件包已含在rootfs内

左右滑动查看完整内容

build$ find ./tmp/work/smarc_rzg2l-poky-linux/ -name helloworld.ko./tmp/work/smarc_rzg2l-poky-linux/core-image-qt/1.0-r0/rootfs/lib/modules/5.10.158-cip22-yocto-standard/extra/helloworld.ko./tmp/work/smarc_rzg2l-poky-linux/kernel-module-helloworld/1.0-r0/helloworld.ko


B.在源码目录直接编译方式

左右滑动查看完整内容

cd /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/buildsource /opt/poky_vlp3.0.3/environment-setup-aarch64-poky-linuxsudo chown -R $USER .make scriptsmake preparemkdir hello  //并拷贝上边的源码文件/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello$ lshelloworld.c    Makefile/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello$ makemake -C /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/usr/src/kernel  M=/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello modulesmake[1]: Entering directory '/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build'  CC [M]  /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello/helloworld.o  MODPOST /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello/Module.symvers  CC [M]  /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello/helloworld.mod.o  LD [M]  /opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello/helloworld.komake[1]: Leaving directory '/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build'hank@rz:/opt/poky_vlp3.0.3/sysroots/aarch64-poky-linux/lib/modules/5.10.158-cip22-yocto-standard/build/hello$ lshelloworld.c  helloworld.ko  helloworld.mod  helloworld.mod.c  helloworld.mod.o  helloworld.o  Makefile  modules.order  Module.symvers



方式2示例



首先提取内核源码:

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3$ source poky/oe-init-build-env~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l devtool modify linux-renesasNOTE: Starting bitbake server...……INFO: Adding local source files to srctree...INFO: Copying kernel config to srctreeINFO: Source tree extracted to /home/xxx/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesasWARNING: SRC_URI is conditionally overridden in this recipe, thus several devtool-override-* branches have been created, one for each override that makes changes to SRC_URI. It is recommended that you make changes to the devtool branch first, then checkout and rebase each devtool-override-* branch and update any unique patches there (duplicates on those branches will be ignored by devtool finish/update-recipe)INFO: Recipe linux-renesas now set up to build from /home/xxx/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas


上面最后一行就是Linux内核源码提取后所在目录,即/home/xxx/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas, 然后去这个目录修改代码即可。


进入Linux源码目录下找个目录增加模块代码,这里使用build/workspace/sources/ linux-renesas /drivers/char目录,在该目录下执行mkdir hello创建目录,然后在hello目录下创建以下文件。


左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas/drivers/char$ tree hello/hello/├── hello.c├── Kconfig└── Makefile


hello.c

左右滑动查看完整内容

#include static int  hello_world_init(void){    printk("Hello world\n");    return 0;}static void  hello_world_exit(void){    printk("Bye world\n");}module_init(hello_world_init);module_exit(hello_world_exit);MODULE_LICENSE("GPL v2");


Kconfig

左右滑动查看完整内容

config HELLO        tristate 'Create a hello module'        default n        help                This is a module to print Hello World!


Makefile

obj-$(CONFIG_HELLO) += hello.o


修改build/workspace/sources/ linux-renesas /drivers/char目录的Kconfig和Makefile:

左右滑动查看完整内容

diff --git a/drivers/char/Kconfig b/drivers/char/Kconfigindex b4e65d1ed..2b96630ab 100644--- a/drivers/char/Kconfig+++ b/drivers/char/Kconfig@@ -508,4 +508,6 @@ config RANDOM_TRUST_BOOTLOADER          believe its RNG facilities may be faulty. This may also be configured          at boot time with "random.trust_bootloader=on/off".
+source "drivers/char/hello/Kconfig"+ endmenudiff --git a/drivers/char/Makefile b/drivers/char/Makefileindex ffce287ef..3056303ff 100644--- a/drivers/char/Makefile+++ b/drivers/char/Makefile@@ -47,3 +47,5 @@ obj-$(CONFIG_PS3_FLASH)               += ps3flash.o obj-$(CONFIG_XILLYBUS)         += xillybus/ obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o obj-$(CONFIG_ADI)              += adi.o++obj-$(CONFIG_HELLO) += hello/


返回yocto顶层目录,选择内核配置

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build$ source poky/oe-init-build-env~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l bitbake virtual/kernel -c menuconfig



编译内核

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l devtool build linux-renesasNOTE: Starting bitbake server...……NOTE: Tasks Summary: Attempted 607 tasks of which 594 didn't need to be rerun and all succeeded.


生成结果

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build$ ls tmp/work/smarc_rzg2l-poky-linux/linux-renesas/5.10.158-cip22+git999-r1/linux-renesas-5.10.158-cip22+git999/drivers/char/hello/built-in.a  hello.o  modules.order


最后制作补丁,创建自己的layer保存补丁。

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3$ source poky/oe-init-build-env~/rzg2l_vlp_v3.0.3/build$ bitbake-layers create-layer  ../meta-mylayer~/rzg2l_vlp_v3.0.3/build$ bitbake-layers add-layer  ../meta-mylayerhank@rz:~/rzg2l_vlp_v3.0.3/build$ tree ../meta-mylayer/../meta-mylayer/├── conf│   └── layer.conf├── COPYING.MIT├── README└── recipes-example    └── example        └── example_0.1.bb
3 directories, 4 files


再次进入源码目录,提交修改,生成补丁

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas$ git status .Refresh index: 100% (70807/70807), done.On branch devtoolChanges not staged for commit:  (use "git add ..." to update what will be committed)  (use "git restore ..." to discard changes in working directory)        modified:   drivers/char/Kconfig        modified:   drivers/char/Makefile
Untracked files:  (use "git add ..." to include in what will be committed)        drivers/char/hello/
no changes added to commit (use "git add" and/or "git commit -a")~/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas$ git add ./*The following paths are ignored by one of your .gitignore files:oe-logsoe-workdirUse -f if you really want to add them.~/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas$ git commit -m "add the hello module"[devtool 6dc52bd44] add the hello module 5 files changed, 25 insertions(+) create mode 100644 drivers/char/hello/Kconfig create mode 100644 drivers/char/hello/Makefile create mode 100644 drivers/char/hello/hello.c


切到build目录执行

左右滑动查看完整内容

~/rzg2l_vlp_v3.0.3/build$ MACHINE=smarc-rzg2l devtool finish linux-renesas ../meta-mylayer/NOTE: Starting bitbake server...……Parsing of 2151 .bb files complete (0 cached, 2151 parsed). 5440 targets, 887 skipped, 3 masked, 0 errors.……INFO: Leaving source tree /home/xxx/rzg2l_vlp_v3.0.3/build/workspace/sources/linux-renesas as-is; if you no longer need it then please delete it manually~/rzg2l_vlp_v3.0.3/build$ tree ../meta-mylayer/../meta-mylayer/├── conf│   └── layer.conf├── COPYING.MIT├── README├── recipes-example│   └── example│       └── example_0.1.bb└── recipes-kernel    └── linux        ├── linux-renesas        │   ├── 0001-add-the-hello-module.patch        │   └── devtool-fragment.cfg        └── linux-renesas_%.bbappend
6 directories, 7 files


上边patch文件就是修改的内容了。



如需了解更详细的使用方法请参考如下网站:

瑞萨官网

https://www.renesas.cn/cn/zh/products/microcontrollers-microprocessors/rz-mpus/rzg2l-getting-started


RZ产品WIKI网站

https://renesas.info/wiki/Main_Page


您可复制下方网址到浏览器中打开进入瑞萨中文论坛查看:

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/


1

END

1


推荐阅读

RZ/G2L构建Linux开发环境

RZ/G2L开发板EMMC启动

开启人工智能应用的最佳解决方案——RZ/V AI SDK

更多精彩内容,请点击

评论
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 87浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 116浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 73浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 58浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 102浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 111浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 103浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦