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

更多精彩内容,请点击

评论
  • Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、使用adduser命令来添加新用户,用户名以industio为例,系统会提示设置密码以及其他信息,您可以根据需要填写或跳过,命令如下:root@id
    Industio_触觉智能 2025-01-17 14:14 145浏览
  • 嘿,咱来聊聊RISC-V MCU技术哈。 这RISC-V MCU技术呢,简单来说就是基于一个叫RISC-V的指令集架构做出的微控制器技术。RISC-V这个啊,2010年的时候,是加州大学伯克利分校的研究团队弄出来的,目的就是想搞个新的、开放的指令集架构,能跟上现代计算的需要。到了2015年,专门成立了个RISC-V基金会,让这个架构更标准,也更好地推广开了。这几年啊,这个RISC-V的生态系统发展得可快了,好多公司和机构都加入了RISC-V International,还推出了不少RISC-V
    丙丁先生 2025-01-21 12:10 586浏览
  • 高速先生成员--黄刚这不马上就要过年了嘛,高速先生就不打算给大家上难度了,整一篇简单但很实用的文章给大伙瞧瞧好了。相信这个标题一出来,尤其对于PCB设计工程师来说,心就立马凉了半截。他们辛辛苦苦进行PCB的过孔设计,高速先生居然说设计多大的过孔他们不关心!另外估计这时候就跳出很多“挑刺”的粉丝了哈,因为翻看很多以往的文章,高速先生都表达了过孔孔径对高速性能的影响是很大的哦!咋滴,今天居然说孔径不关心了?别,别急哈,听高速先生在这篇文章中娓娓道来。首先还是要对各位设计工程师的设计表示肯定,毕竟像我
    一博科技 2025-01-21 16:17 158浏览
  • 数字隔离芯片是一种实现电气隔离功能的集成电路,在工业自动化、汽车电子、光伏储能与电力通信等领域的电气系统中发挥着至关重要的作用。其不仅可令高、低压系统之间相互独立,提高低压系统的抗干扰能力,同时还可确保高、低压系统之间的安全交互,使系统稳定工作,并避免操作者遭受来自高压系统的电击伤害。典型数字隔离芯片的简化原理图值得一提的是,数字隔离芯片历经多年发展,其应用范围已十分广泛,凡涉及到在高、低压系统之间进行信号传输的场景中基本都需要应用到此种芯片。那么,电气工程师在进行电路设计时到底该如何评估选择一
    华普微HOPERF 2025-01-20 16:50 122浏览
  •  万万没想到!科幻电影中的人形机器人,正在一步步走进我们人类的日常生活中来了。1月17日,乐聚将第100台全尺寸人形机器人交付北汽越野车,再次吹响了人形机器人疯狂进厂打工的号角。无独有尔,银河通用机器人作为一家成立不到两年时间的创业公司,在短短一年多时间内推出革命性的第一代产品Galbot G1,这是一款轮式、双臂、身体可折叠的人形机器人,得到了美团战投、经纬创投、IDG资本等众多投资方的认可。作为一家成立仅仅只有两年多时间的企业,智元机器人也把机器人从梦想带进了现实。2024年8月1
    刘旷 2025-01-21 11:15 658浏览
  • 故障现象 一辆2007款日产天籁车,搭载VQ23发动机(气缸编号如图1所示,点火顺序为1-2-3-4-5-6),累计行驶里程约为21万km。车主反映,该车起步加速时偶尔抖动,且行驶中加速无力。 图1 VQ23发动机的气缸编号 故障诊断接车后试车,发动机怠速运转平稳,但只要换挡起步,稍微踩下一点加速踏板,就能感觉到车身明显抖动。用故障检测仪检测,发动机控制模块(ECM)无故障代码存储,且无失火数据流。用虹科Pico汽车示波器测量气缸1点火信号(COP点火信号)和曲轴位置传感器信
    虹科Pico汽车示波器 2025-01-23 10:46 70浏览
  • 现在为止,我们已经完成了Purple Pi OH主板的串口调试和部分配件的连接,接下来,让我们趁热打铁,完成剩余配件的连接!注:配件连接前请断开主板所有供电,避免敏感电路损坏!1.1 耳机接口主板有一路OTMP 标准四节耳机座J6,具备进行音频输出及录音功能,接入耳机后声音将优先从耳机输出,如下图所示:1.21.2 相机接口MIPI CSI 接口如上图所示,支持OV5648 和OV8858 摄像头模组。接入摄像头模组后,使用系统相机软件打开相机拍照和录像,如下图所示:1.3 以太网接口主板有一路
    Industio_触觉智能 2025-01-20 11:04 194浏览
  • 日前,商务部等部门办公厅印发《手机、平板、智能手表(手环)购新补贴实施方案》明确,个人消费者购买手机、平板、智能手表(手环)3类数码产品(单件销售价格不超过6000元),可享受购新补贴。每人每类可补贴1件,每件补贴比例为减去生产、流通环节及移动运营商所有优惠后最终销售价格的15%,每件最高不超过500元。目前,京东已经做好了承接手机、平板等数码产品国补优惠的落地准备工作,未来随着各省市关于手机、平板等品类的国补开启,京东将第一时间率先上线,满足消费者的换新升级需求。为保障国补的真实有效发放,基于
    华尔街科技眼 2025-01-17 10:44 238浏览
  •  光伏及击穿,都可视之为 复合的逆过程,但是,复合、光伏与击穿,不单是进程的方向相反,偏置状态也不一样,复合的工况,是正偏,光伏是零偏,击穿与漂移则是反偏,光伏的能源是外来的,而击穿消耗的是结区自身和电源的能量,漂移的载流子是 客席载流子,须借外延层才能引入,客席载流子 不受反偏PN结的空乏区阻碍,能漂不能漂,只取决于反偏PN结是否处于外延层的「射程」范围,而穿通的成因,则是因耗尽层的过度扩张,致使跟 端子、外延层或其他空乏区 碰触,当耗尽层融通,耐压 (反向阻断能力) 即告彻底丧失,
    MrCU204 2025-01-17 11:30 210浏览
  • 2024年是很平淡的一年,能保住饭碗就是万幸了,公司业绩不好,跳槽又不敢跳,还有一个原因就是老板对我们这些员工还是很好的,碍于人情也不能在公司困难时去雪上加霜。在工作其间遇到的大问题没有,小问题还是有不少,这里就举一两个来说一下。第一个就是,先看下下面的这个封装,你能猜出它的引脚间距是多少吗?这种排线座比较常规的是0.6mm间距(即排线是0.3mm间距)的,而这个规格也是我们用得最多的,所以我们按惯性思维来看的话,就会认为这个座子就是0.6mm间距的,这样往往就不会去细看规格书了,所以这次的运气
    wuliangu 2025-01-21 00:15 320浏览
  • 临近春节,各方社交及应酬也变得多起来了,甚至一月份就排满了各式约见。有的是关系好的专业朋友的周末“恳谈会”,基本是关于2025年经济预判的话题,以及如何稳定工作等话题;但更多的预约是来自几个客户老板及副总裁们的见面,他们为今年的经济预判与企业发展焦虑而来。在聊天过程中,我发现今年的聊天有个很有意思的“点”,挺多人尤其关心我到底是怎么成长成现在的多领域风格的,还能掌握一些经济趋势的分析能力,到底学过哪些专业、在企业管过哪些具体事情?单单就这个一个月内,我就重复了数次“为什么”,再辅以我上次写的:《
    牛言喵语 2025-01-22 17:10 175浏览
  • 本文介绍瑞芯微开发板/主板Android配置APK默认开启性能模式方法,开启性能模式后,APK的CPU使用优先级会有所提高。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。源码修改修改源码根目录下文件device/rockchip/rk3562/package_performance.xml并添加以下内容,注意"+"号为添加内容,"com.tencent.mm"为AP
    Industio_触觉智能 2025-01-17 14:09 203浏览
  •     IPC-2581是基于ODB++标准、结合PCB行业特点而指定的PCB加工文件规范。    IPC-2581旨在替代CAM350格式,成为PCB加工行业的新的工业规范。    有一些免费软件,可以查看(不可修改)IPC-2581数据文件。这些软件典型用途是工艺校核。    1. Vu2581        出品:Downstream     
    电子知识打边炉 2025-01-22 11:12 134浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦