【A10-OLinuXino-LIME 开发板试用体验】+ 驱动01_helloworld

  • 开发
  • wuQAQ
  • LV4工程师
  • |      2017-04-15 22:02:25
  • 浏览量 1900
  • 回复:4
声明:本文采用的环境为Ubuntu16.04 64bits和A10-OLinuXino-LIME开发板(简称A10)。 所写的驱动可以在Ubuntu16.04运行测试,然后在交叉编译运用到A10开发板上。 1、查看内核版本 我使用的是Ubuntu16.04 LTS 64bit,内核版本为4.4.0_67,在编写驱动程序的时候最重要的就是要看清内核版本,查看内核版本的命令为uname -a,显示结果如下: 驱动程序一般都是以模块的形式添加到内核代码中,所以如果内核版本不正确,添加的时候有可能会失败。 一般情况下如果要移植到别的开发板或者其他系统都需要下载相应内核的源码进行编译,但是如果不需要使用交叉编译,那么就可以直接使用本机的内核进行编译,如果要使用交叉编译那么就需要去kernel开源社区下载相应的内核版本。 2、驱动程序的编写 代码如下:
#include 

#include 



MODULE_LICENSE("Dual BSD/GPL");



static int hello_init(void)

{

        printk(KERN_ALERT "hello, world\n");

        return 0;

}



static void hello_exit(void)

{

        printk(KERN_ALERT "Goodbye, cruel world\n");

}



module_init(hello_init);

module_exit(hello_exit);

1、其中module_init和module_exit是Linux驱动程序的入口,分别在加载内核和卸载内核的时候引用 2、MODULE_LICENSE是Linux 内核的一个特殊的宏,用来告诉内核,该模块采用自由许可证,是驱动程序中不可缺少的。 3、printk类似与c语言中的printf,但是在内核中是没有gcc的,内核中调用的是内核中的函数变量,KERN_ALERT是内核消息的优先级 3、Makefile文件的编写 学习嵌入式Linux的一个很重要的技能就是Makefile文件的编写,在Linux中,最好用的编译器就是GCC,但是当C文件的很多的时候,一个一个文件的编译链接就显得十分麻烦,Makefile文件可以很容易的解决这个问题。 一个简单的Makefile代码如下:
ifneq ($(KERNELRELEASE),)

        obj-m := helloworld.o

else

        KERNELDIR ?= /lib/modules/$(shell uname -r)/build

        PWD := $(shell pwd)

default:

        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:

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

endif

效果如下: 4、讲驱动程序加载到内核中 操作内核的命令主要有三个:
  • insmod: 加载驱动模块
  • rmmod: 卸载驱动模块
  • lsmod: 列出内核中的驱动模块
在上面的驱动程序中,分别在加载驱动模块和卸载驱动模块的时候打印出紧急消息。 加载模块: 卸载模块:在加载和卸载驱动模块的时候你发现终端并没有任何消息输出,其实是因为Ubuntu中,消息输出在/var/log/syslog中,你可以时候dmesg -c来查看: 5、嵌入式开发板上加载驱动模块嵌入式的开发板上的驱动程序与在Ubuntu16.04的代码和Makefile文件都差不多,不同之处就是在嵌入式开发板上的程序需要指定内核目录,因为嵌入式开发板上的内核与Ubuntu16.04的内核不同,因此需要找到合适的内核才行。其次架构和交叉编译工具链不同。 修改Makefile如下: KERNELDIR ?= /home/wuqaq/DISK/A10_kernel_3.4/linux-sunxi linux-sunxi是板子开发商提供的内核,我利用的是上一篇文章提供的内核源码文件。修改完后利用终端在该目录下执行一下命令:
make ARCH=arm CROSS_COMPILE=arm-linux-gnuea -j4
会生成.ko的驱动文件。利用U盘拷到开发板上,和Ubuntu下的加载和卸载方式一样,测试驱动是否可用
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:2
qq1328512480 2017-04-18
看出楼主用心,点!赞
0   回复
举报
发布
xukejing 2017-04-17
如果把hello world改成图画的字符,是不是能画画了?另外开机时候终端画图是不是也是这么做的?
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子