1、先写Makefile编译出***.ko文件。
模板如下,保存到命名为Makefile文件里,放到你代码的同级目录下。
TARGET=my_proc.ko。
LINUXDIR=/lib/modules/$(shell uname -r)/build。
PWD=$(shell pwd)。
obj-m :=
obj-m += my_proc.o。
all: $(TARGET)
$(TARGET): $(OBJS)。
make -C $(LINUXDIR) SUBDIRS=$(PWD) modules。
clean:
rm -f modules.order Module.symvers $(TARGET) *.mod.c *.o。
rm -rf .tmp_versions .mod* Module.markers。
2、make
3、root权限下用命令插入模块。
insmod my_proc.ko。
4、可以用你写的应用程序打开、操作模块了。
5、查看模块命令
lsmod
cat /proc/modules。
modinfo my_proc.ko。
6、root下卸载模块
rmmod
我这儿有个写好的makefile你可以参考一下,在终端直接运行make 命令就可以了。
CC =gcc
CFLAGS =-Wall -g -o。
RM =rm -rf
BIN =bin/file_type bin/file_ugid bin/perm bin/file_perm bin/access bin/umask bin/chmod。
bin/st_dev:src/st_dev.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/cd:src/cd.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/readdir:src/readdir.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/mkdir:src/mkdir.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/utime:src/utime.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/symlink:src/symlink.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/rename:src/rename.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/remove:src/remove.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/ulink:src/ulink.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/link:src/link.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/truncate:src/truncate.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/lengh:src/lengh.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/chmod:src/chmod.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/umask:src/umask.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/access:src/access.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/file_perm:src/file_perm.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/perm:src/perm.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/file_ugid:src/file_ugid.c。
$(CC) $(CFLAGS) $@ $< -I./include。
bin/file_type:src/file_type.c。
$(CC) $(CFLAGS) $@ $< -I./include。
clean:
$(RM) $(BIN)
如果编译出错的话,make就会停止,然后打印出一堆Error,如果成功编译完了,是没有Error、错误等字样出现的。判断是否成功只要看make打印信息的末尾是不是有Error。
如果想见证一下错误,就在源代码里故意弄几个错误,make最后就会出错,然后可以观察一下错误信息。
1、make:是一个非常重要的编译命令,本质上它是一个程序。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。
2、Makefile文件 :Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作,本质上makefile文件是个文本文件,用于配置编译过程。makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。
3、在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:
$ make -f Makefile.debug。
例如,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。即在filea.c和fileb.c里都有这样的声明:
#include "defs"。
那么下面的文档就描述了这些文件之间的相互联系:。
#It is a example for describing makefile 。
prog : filea.o fileb.o filec.o 。
cc filea.o fileb.o filec.o -LS -o prog 。
filea.o : filea.c a.h defs 。
cc -c filea.c 。
fileb.o : fileb.c b.h defs 。
cc -c fileb.c 。
filec.o : filec.c c.h 。
cc -c filec.c
这个描述文档就是一个简单的makefile文件。
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具.。
1) 配置sudo ./configure –prefix=/home/crosstool-ng/install 。
./configure命令就是执行当前目录的名为configure的脚本,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,并把生成的makefile放到=/home/crosstool-ng/install 下 。
2) 编译sudo make
make的基本用处是自动根据makefile里的指令来编译源文件.。
3) 安装sudo make install。
make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。默认/usr/local/bin。
原文地址:http://www.qianchusai.com/linux%E4%BD%BF%E7%94%A8make%E7%BC%96%E8%AF%91.html