Linux内核编程 <1> -- Hello Mod
2016-05-27 16:31
501 查看
1. hello mod
#include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> static int __init hello_start(void){ printk("hello,this moudle start work!\n"); return 0; } static void __exit hello_exit(void){ printk("hello,this moule exit!\n"); } module_init(hello_start); module_exit(hello_exit);
2.Makefile
obj-m=hello_ker.o CURRENT_PATH:=$(shell pwd) LINUX_KERNEL:=$(shell uname -r) LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL) all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: mkae -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
一些问题
1) 在Makefile中,其中LINUX_PATH :=$(shell uname -r)很重要,内核的程序在编译时,需要的头文件当然得符合当前系统的版本。当然也可以指定编译的版本,但前提是自己得有相应的linux源代码或者头文件。2) 关于C语言的语法问题。由于自身C的编程习惯,在传参时如果函数参数没有参数,一般会以函数()结束
static int __exit printkhello()
但是在 make编译的过程中,会出现以下问题:
error: function declaration isn’t a prototype [-Werror=strict-prototypes]
意思大意就是函数原型不匹配的错误。
后来解决方法是在func()括号中添加了func(void)结束,在linux中的内核编程中,以后用void表示无参就可以了。
3) 接下来这个问题就比较坑爹了。由于英语水平不高,以至于module单词接连拼错,出现了很多的error。后来和朋友交流,起初他们也常犯这些低级错误。
相关文章推荐
- Linux内核编程实验二
- centOS系统下安装apktool工具
- Linux下NFS搭建流程
- MySQL-5.5.49-1.linux2.6.x86_64.rpm-bundle.tar安装问题
- Linux命令解析过程
- linux之VI编辑器使用
- kalilinux下使用Aircrack-ng破解过程
- linux中常用的一些命令
- ARM linux s3c2440 解决黑屏问题
- Unix & Linux 笔记(10)
- linux 内存释放命令
- Linux命令大全
- 初学linux命令-mkdir、rm、rmdir、mv
- linux运维实战精囊1(ifconfig,grep,cut,sed,awk)
- 【Linux】文件读写及cat命令的实现
- Linux下Nodejs安装
- kalilinux下wifi密码破解
- Linux之编辑器vim配置
- 为AM335x移植Linux内核主线代码(1)了解dtb
- linux 禁止账户远程登录