手机版
你好,游客 登录 注册
背景:
阅读新闻

Linux上第一个驱动程序:hello

[日期:2016-03-29] 来源:Linux社区  作者:floatingstars [字体: ]

写过一篇文章是在ARM11上完成的LED的驱动和应用程序,现在换了平台,在am335x上。相比之前是在内核里面修改Kconfig和Makefile文件,然后编译模块或者.ko文件,这次直接编写Makefile,然后指定内核目录和编译器即可编译获得.ko文件,以后的驱动开发都可以参考此Makefile部分,故编写此文档,以备他日参考之用。

参考代码:

#include  linux/kernel.h

#include  linux/module.h

static int __init ARM_Hello_Init(void)

{

    printk("Hello, Hello module is installed !\n");

    return 0;

}

static void __exit ARM_Hello_Exit(void)

{

    printk("Good-bye, Hello module was removed!\n");

}

module_init(ARM_Hello_Init);

module_exit(ARM_Hello_Exit);

MODULE_LICENSE("GPL");

 

参考Makefile

#ifneq ($(KERNELRELEASE),)

 

obj-m:=hello-dev.o

 

#else

 

#generate the path

CURRENT_PATH:=$(shell pwd)

export ARCH = arm

export  CROSS_COMPILE = arm-none-linux-gnueabi-

CC :=$(CROSS_COMPILE)gcc

LD :=$(CROSS_COMPILE)ld

 

#the absolute path

#LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build

LINUX_KERNEL_PATH=/opt/ti-sdk-am335x-evm-08/board-support/linux-3.14.26-g2489c02

 

.PHONY: clean distclean

 

#complie object

default:

        make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules

       

clean:

        rm -rf *.o *.mod.c *.mod.o *.order *.symvers

 

distclean:

        rm -rf *.o *.mod.c *.mod.o *.order *.symvers *.ko

       

#endif

编译结果生成:

hello.ko

查看结果信息:

$ modinfo hello.ko

filename:      /mnt/share/example/hello-dev/hello-dev.ko

license:        GPL

srcversion:     831720228EB3107175F1056

depends:       

vermagic:      3.14.26-g07d13c6-dirty mod_unload modversions ARMv7 p2v8

放到ARM平台加载、卸载:

$Insmod hello.ko

Hello, DeepFish Hello module is installed !

$rmmod hello.ko

Good-bye,DeepFish Hello module was removed!

大功告成!

还可参考另一份日志:

Linux上第一个驱动+应用程序:LED灯闪烁  http://www.linuxidc.com/Linux/2016-03/129598.htm

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-03/129597.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款