嵌入式Linux 驱动编译到内核

参考了原文,原文地址:https://www.cnblogs.com/embInn/p/14038119.html

原作者写的很好,我在移植的时候,借鉴了里面内容,我的内核是linux-3.14.38,添加驱动前,我是提前编译过了一次,

下面是简单的驱动代码 hello.c

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kmod.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/reboot.h>
#include<linux/init.h>
#include<linux/module.h>
#include<linux/moduleparam.h>
#include<linux/kernel.h>/*printk()*/
#include<linux/sched.h>

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>

static int __init hello_init(void)
{
    printk(KERN_ALERT "Hello word\r\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_ALERT "Goodbye\r\n");
}

/* 注册卸载 */
module_init( hello_init );
module_exit( hello_exit );
MODULE_LICENSE("Dual BSD/GPL");

在\linux-3.14.38\drivers\目录下建立hello目录

目录下文件如下:

Kconfig内容:(大致内容如下,原文中  “#endmenu”我修改为了endmenu)

#
# HELLO device configuration
#

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

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

endmenu

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

  • y: 编译进内核

  • m:编译为模块.ko文件

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

Makefile内容:

obj-$(CONFIG_HAVE_HELLO) += hello.o 

表示CONFIG_HAVE_HELLO使能时,编译规则指定的文件为hello.c

编辑\linux-3.14.38\drivers\ 目录下的Kconfig,Makefile文件

Kconfig文件,在最底部添加

menu "Device Drivers"

source "drivers/base/Kconfig"

source "drivers/bus/Kconfig"

source "drivers/connector/Kconfig"

source "drivers/mtd/Kconfig"
......

source "drivers/hello/Kconfig"
endmenu

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

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

Makefile文件:

#
# Makefile for the Linux kernel device drivers.
#
# 15 Sep 2000, Christoph Hellwig <hch@infradead.org>
# Rewritten to use lists instead of if-statements.
#

obj-y				+= irqchip/
obj-y				+= bus/

obj-$(CONFIG_GENERIC_PHY)	+= phy/

# GPIO must come after pinctrl as gpios may need to mux pins etc
.......

obj-$(CONFIG_HAVE_HELLO) += hello/

在原Makefile后添加obj-$(CONFIG_HAVE_HELLO) += hello/,这句话的作用是当CONFIG_HAVE_HELLO使能后,在哪里去找源文件。在结合hello文件下模块Makefile就形成了层次式Makefile

 

编译

我是之前内核编译过一次,然后运行make,提示有新的驱动是否加入,输入Y,就可以了,我自己又保存了一下,.config文件(备份)

然后调用make distclean,清除,

调用make menuconfig,可以在配置菜单中看到新加入的驱动了
 

 

然后,

在make 等编译成功即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值