打印
[技术问答]

NUC980 向Linux内核添加驱动

[复制链接]
655|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时,还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载,就会很不方便。本文将介绍如何在内核编译时就把驱动加入内核。



(1)Linux 2.x版本的方法:(未引入设备树,可以更清楚其原理)

  ①在内核/dervers 下 :建立的Kconfig 文件、Makefile 文件和源文件同在一目录下。



Makefile:

#
# Makefile for the Driver-myalloc.
#
obj-$(CONFIG_DRIVER_VMALLOC) +=driver_kernel.o
Kconfig:

#
# DRIVER test subsystem configuration
#
menu "DRIVER KMALLOC support"
    config  DRIVER_VMALLOC
       tristate "Driver_test is supported"
---help---
    Driver_test use vmalloc .
endmenu
②修改drivers/Kconfig文件,增加一行把myalloc配置作为驱动的一个选项,所添加的内容如下:   

source "drivers/drivertest/Kconfig


修改drivers/Makefile 文件,在文件的最后,添加如下脚本:

obj-$(CONFIG_DRIVER_VMALLOC) +=drivertest/
这样使在编译Linux 内核驱动时,能把drivertest/目录包含进去。

在这里使用了宏定义为 CONFIG_DRIVER_VMALLOC判断是否包含。



③ 完成以上修改,make menuconfig重新配置内核。

看到增加了一个选型:




(2)Linux 高版本,引入设备树加载的方法其实是一样的。

驱动程序中增加了获取设备树参数的操作,但是其他的和上面的程序加载没什么关系。


使用特权

评论回复
沙发
天天向善| | 2022-11-8 13:41 | 只看该作者
驱动程序不需要自己编写哦?

使用特权

评论回复
板凳
tpgf| | 2022-12-5 14:47 | 只看该作者
内核版本不同的话 需要对驱动进行哪方面的改动呢

使用特权

评论回复
地板
nawu| | 2022-12-5 14:57 | 只看该作者
除了通过模块的方式动态添加以外  还有其他方式进行添加吗

使用特权

评论回复
5
aoyi| | 2022-12-5 16:16 | 只看该作者
驱动的种类不同 添加的方式会有区别吗

使用特权

评论回复
6
zljiu| | 2022-12-5 16:24 | 只看该作者
在u-boot 运行完之后,就开始进行kernel 加载。

使用特权

评论回复
7
gwsan| | 2022-12-5 16:39 | 只看该作者
驱动的加载主要是在do_initcalls() 函数中实现

使用特权

评论回复
8
tfqi| | 2022-12-5 17:04 | 只看该作者
从kernel start 到驱动加载的函数顺序  start_kernel()-> rest_init()-> kernel_init() -> do_basic_setup() -> do_initcalls() -> do_one_initcall(initcall_t fn) ->

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

3870

帖子

3

粉丝