0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

飞凌嵌入式i.MX8MP开发板移植驱动,其实可以很简单

飞凌嵌入式 2022-11-15 14:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

各位工程师用户在对飞凌嵌入式OKMX8MP-C开发板进行开发的过程中,可能会遇到需要移植驱动的情况。为避免用户因不了解移植驱动的过程而影响开发进度,今天小编会以写一个hello驱动为例,演示移植驱动的过程,有需求的小伙伴可参考此方法自行操作。

3f150496-5ec3-11ed-b116-dac502259ad0.png

01

进入源码的drivers目录下,并创建一个名为hello的目录:


forlinx@ubuntu:~$  cd  /home/forlinx/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$mkdir  hello

02

进入hello目录,创建hello.c:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  cd hello
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi hello.c

在hello.c中写入如下内容:


#include  
#include  
static  int hello_init(void)
{
printk(KERN_ALERT  "Hello world\n");
return  0;
}
static  void hello_exit(void)
{
printk(KERN_ALERT  "Goodbye world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual  BSD/GPL");


程序含义:insmod驱动挂载时打印Hello world,rmmod驱动卸载时打印Goodbye world

03

在该文件夹下创建Kconfig,Makefile两个文件。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi  Kconfig

在Kconfig文件中写入如下内容:


config  HAVE_HELLO
tristate       "hello driver"
help
This  hello  driver  is  just  to  show  how  to  develop  driver  process.


This  driver  can  also  be  built  as  a  module.  If  so,  the  module will  be  called  .
default  y
#endmenu

表示如果使能了CONFIG_HAVE_HELLO,在内核裁剪配置文件中,将显示hellodrivers菜单,默认编译进内核:

y:编译进内核

m:编译为模块.ko文件

n:表示不编译,未使能。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  vi  Kconfig

在Makefile文件中写入如下内容:

obj-$(CONFIG_HAVE_HELLO)        +=      hello.o

注意:

宏定义的名字要和Kconfig中的一样。后面添加需要编译的文件名,因为内核会自动添加前缀CONFIG,所以我们这里也要在名字前面添加CONFIG_,表示CONFIG_HAVE_HELLO使能时,编译规则指定的文件为hello.c。

给添加的这三个文件权限:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 hello.c
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 Kconfig
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  chmod  777 Makefile

04

编辑drivers顶层的Kconfig,Makefile文件。


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers/hello$  cd  ..
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  vi Kconfig

在Kconfig文件中写入如下内容:


source  "drivers/counter/Kconfig"
source  "drivers/mxc/Kconfig"
source  "drivers/hello/Kconfig"    //在endmenu前添加hello文件夹的配置文件解析
endmenu

如此一来,配置系统就会按照这个配置去解析hello文件夹下的Kconfig。

编辑Makefile:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  vi Makefile

在Makefile文件中写入如下内容:


obj-$(CONFIG_COUNTER)           += counter/
obj-y                           += mxc/
obj-$(CONFIG_HAVE_HELLO)        +=      hello/     //在Makefile最后加入这一句

这句话的作用是当CONFIG_HAVE_HELLO使能后,在哪里去找源文件。再结合hello文件下模块Makefile就形成了层次式Makefile。注意不要少了/,这里添加自定义文件夹的名字,表示把这个文件夹编译进内核。

05

开始编译:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/drivers$  cd ../..
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  .  /opt/fsl-imx-xwayland/5.4-zeus/environment-setup-aarch64-poky-linux
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  .  environment-setup-aarch64-poky-linux
forlinx@ubuntu:~/work/OK8MP-linux-sdk$  cd  OK8MP-linux-kernel
forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel$  make modules
scripts/kconfig/conf --syncconfig Kconfig
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '�'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '�'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '�'
drivers/hello/Kconfig:7:warning:  ignoring unsupported character '�'
*
* Restart config...
*
*
* Device Drivers
*
Trust the bootloader  to initialize Linux's CRNG (RANDOM_TRUST_BOOTLOADER) [N/y/?] n
Platform support for  Chrome hardware (transitional) (MFD_CROS_EC) [Y/n/m/?] y
Trusted Execution  Environment support (TEE) [Y/n/m/?] y
hello driver  (HAVE_HELLO) [Y/n/m/?] (NEW) m    //将hello驱动编译进内核就配置为m
CALL   scripts/checksyscalls.sh
CALL   scripts/atomic/check-atomics.sh
CHK      include/generated/compile.h
GZIP   kernel/config_data.gz
CC     kernel/configs.o
[…]
LD      vmlinux
SORTEX  vmlinux
SYSMAP  System.map
Building modules,  stage 2.
MODPOST 536 modules
CC [M] drivers/hello/hello.mod.o
LD [M] drivers/hello/hello.ko

编译完成后,即可在OK8MP-linux-kernel/drivers/hello目录下看到编译生成的驱动了:


forlinx@ubuntu:~/work/OK8MP-linux-sdk/OK8MP-linux-kernel/$  ls drivers/hello
hello.c  hello.ko  hello.mod  hello.mod.c  hello.mod.o  hello.o  Kconfig  Makefile modules.order

06

将hello.ko使用U盘或TF卡拷贝到开发板里进行验证:

root@OK8MP:~# cd  /run/media/sda1/              //进入U盘的路径下
root@OK8MP:/run/media/sda1#  insmod  hello.ko   //挂载hello.ko
[  138.679964] Hello  world                     //挂载驱动打印信息
root@OK8MP:/run/media/sda1#  rmmod  hello.ko    //卸载hello.ko
[  142.022115]  Goodbye  world                  //卸载驱动打印信息
root@OK8MP:/run/media/sda1#

由上述测试可看,hello.ko驱动可正常运行。

以上就是小编为大家演示的自行书写并添加一个驱动的过程,若您想要移植某一个模块,可向模块厂家索要现成的驱动.c文件,之后再按照上述步骤配置Makefile和Kconfig即可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388708
  • 嵌入式
    +关注

    关注

    5186

    文章

    20146

    浏览量

    328816
  • NXP
    NXP
    +关注

    关注

    61

    文章

    1376

    浏览量

    194738
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【作品合集】嵌入式OK527N-C开发板测评

    嵌入式OK527N-C开发板测评作品合集 产品介绍: OK527-C开发板采用核心+底板分
    发表于 09-22 15:54

    送啦!嵌入式联合NXP邀您参加OK-MX9596-C开发板试用活动

    送啦!嵌入式联合NXP邀您参加OK-MX9596-C开发板试用活动
    的头像 发表于 08-22 08:03 759次阅读
    送啦!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>联合NXP邀您参加OK-<b class='flag-5'>MX</b>9596-C<b class='flag-5'>开发板</b>试用活动

    RK3568开发板暗藏32位兼容开关?嵌入式带你一键解锁!

    RK3568是一款64位处理器,嵌入式为其提供的交叉编译器也是64位的,然而部分用户可能需要在RK3568开发板上运行32位应用。本文将详细阐述如何使用32位交叉编译器,编译出32
    的头像 发表于 07-19 08:49 4186次阅读
    RK3568<b class='flag-5'>开发板</b>暗藏32位兼容开关?<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>带你一键解锁!

    嵌入式受邀亮相「2025龙芯产品发布暨用户大会」

    6月26日,2025龙芯产品发布暨用户大会在北京隆重举行,嵌入式作为龙芯重要的生态合作伙伴受邀亮相,并带来了基于龙芯2K0300-i处理器设计
    的头像 发表于 06-27 08:07 1154次阅读
    <b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>受邀亮相「2025龙芯产品发布暨用户大会」

    T527N开发板试用】开箱与开发板介绍视频

    嵌入式OK527N-C开发板开箱介绍】 https://www.bilibili.com/video/BV1sfKSzmEtU/?share_source=copy_web&
    发表于 06-26 09:43

    5分钟学会网络服务搭建!i.MX9352开发板 + Linux 6.1实战示例

    本文就将以嵌入式OK-MX9352-C开发板(搭载了在工业物联网领域广泛应用的NXP i.MX
    的头像 发表于 06-13 16:42 1079次阅读
    5分钟学会网络服务搭建!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>i.MX</b>9352<b class='flag-5'>开发板</b> + Linux 6.1实战示例

    5分钟学会网络服务搭建,i.MX9352 + Linux 6.1实战示例

    本文将以嵌入式OK-MX9352-C开发板(搭载了在工业物联网领域广泛应用的NXP i.MX
    的头像 发表于 05-30 11:08 2146次阅读
    5分钟学会网络服务搭建,<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>i.MX</b>9352 + Linux 6.1实战示例

    「2025恩智浦创新技术峰会」嵌入式亮相上海首站

    2025年5月14日,【2025年恩智浦创新技术峰会】首站登陆上海,嵌入式作为恩智浦(NXP)金牌合作伙伴受邀参会,聚焦“工业与物联网”领域,携多款边缘侧AI核心
    的头像 发表于 05-15 13:38 1059次阅读
    「2025恩智浦创新技术峰会」<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>亮相上海首站

    焕新登场!嵌入式FET-MX8MPQ-SMARC核心发布

    嵌入式FET-MX8MPQ-SMARC核心基于NXP i.MX8MPQ处理器
    的头像 发表于 05-07 11:29 929次阅读
    焕新登场!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>FET-<b class='flag-5'>MX8</b>MPQ-SMARC核心<b class='flag-5'>板</b>发布

    从DeepSeek到Qwen,AI大模型的移植与交互实战指南-嵌入式

    在不久前发布的《技术实战|OK3588-C开发板上部署DeepSeek-R1大模型的完整指南》一文中,小编为大家介绍了DeepSeek-R1在嵌入式OK3588-C
    的头像 发表于 03-28 08:06 2526次阅读
    从DeepSeek到Qwen,AI大模型的<b class='flag-5'>移植</b>与交互实战指南-<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>

    恩智浦推出FRDM i.MX 93开发板

    备受嵌入式开发者青睐的恩智浦FRDM开发平台,迎来了一位新成员——FRDM i.MX 93开发板,这也是第一块配备i.MX MPU的FRDM
    的头像 发表于 02-21 14:22 2915次阅读

    强悍的I.MX8MP核心

    在当今的嵌入式系统开发领域,一款性能卓越且尺寸小巧的核心能够为众多项目带来极大的便利。今天,我们就来深入探讨一下 MYZR新款I.MX8MP 核心
    的头像 发表于 02-13 17:05 663次阅读

    3.1s启动!嵌入式i.MX93开发板部署LVGL,打造更高效的GUI

    近期,嵌入式为基于NXP i.MX93系列处理器打造的OK-MX9352-C开发板成功
    的头像 发表于 01-16 11:52 1062次阅读
    3.1s启动!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX</b>93<b class='flag-5'>开发板</b>部署LVGL,打造更高效的GUI

    2秒启动!嵌入式RK3506开发板LVGL显示方案,让界面炫起来

    近期,嵌入式为OK3506J-S开发板移植了最新9.2版本的LVGL,支持多种屏幕构件以及鼠标、键盘、触摸等多种输入方式, 能够带来更加
    的头像 发表于 01-10 10:52 1642次阅读
    2秒启动!<b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b>RK3506<b class='flag-5'>开发板</b>LVGL显示方案,让界面炫起来

    嵌入式i.MX8M Mini核心已支持Linux6.1

    嵌入式FETMX8MM-C核心现已支持Linux6.1系统,此次升级不仅使系统功能更加丰富,还通过全新BSP实现了内存性能的显著提升。
    的头像 发表于 01-10 09:56 2807次阅读
    <b class='flag-5'>飞</b><b class='flag-5'>凌</b><b class='flag-5'>嵌入式</b><b class='flag-5'>i.MX8</b>M Mini核心<b class='flag-5'>板</b>已支持Linux6.1