但是当你要编译一个工程 这个工程有100个c 和h文件时 再使用如上命令 就显得不靠谱了
这时就可以写个makefile 写完后输入make命令来进行自动编译 至于怎么写 说来就话长啦
你可以到网上查一查 或者到网上下载一个模版研究研究1、先写Makefile编译出ko文件
模板如下,保存到命名为Makefile文件里,放到你代码的同级目录下
TARGET=my_procko
LINUXDIR=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
obj-m :=
obj-m += my_proco
all: $(TARGET)
$(TARGET): $(OBJS)
make -C $(LINUXDIR) SUBDIRS=$(PWD) modules
clean:
rm -f modulesorder Modulesymvers $(TARGET) modc o
rm -rf tmp_versions mod Modulemarkers
2、make
3、root权限下用命令插入模块
insmod my_procko
4、可以用你写的应用程序打开、 *** 作模块了
5、查看模块命令
lsmod
cat /proc/modules
modinfo my_procko
6、root下卸载模块
rmmodMakefile文件 :Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作,本质上makefile文件是个文本文件,用于配置编译过程。makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。1 CC=gcc
2 MODCFLAGS:=-O6 -Wall -DMODULE -D__KERNEL__ -DLINUX
3 helloo:helloc /usr/include/linux/versionh
4 $(CC) $(MODCFLAGS) -c helloc
5 echo insmod helloo to turn it on
注意第四行开头要用tab键INC_PATH := -I/include/
LIB_PATH := -L/lib/
LIBS := $(LIB_PATH) -lerr -larm
CC := gcc
LD := gcc
CFLAGS := -O2 -Wall $(INC_PATH)
SRC_PATH := /source
SOURCE := $(SRC_PATH)/ac\
$(SRC_PATH)/bc\
$(SRC_PATH)/cc
TARGET := target
OBJS := ao bo co
$(TARGET): $(OBJS)
$(LD) -O2 -o $(TARGET) $(OBJS) $(LIBS)
ao : $(SRC_PATH)/ac
$(CC) $(CFLAGS) -c -o $@ $<
bo : $(SRC_PATH)/bc
$(CC) $(CFLAGS) -c -o $@ $<
co : $(SRC_PATH)/cc
$(CC) $(CFLAGS) -c -o $@ $<
PHONY: clean
clean:
-rm -f $(OBJS)
出现这个问题的原因有2种\x0d\1没有写入权限\x0d\2此文件正在被编辑\x0d\\x0d\如果是没有使用权限,可以用\x0d\ sudo vi 文件名\x0d\或者\x0d\ sudo gedit 文件名\x0d\试试,可以的话会叫你输你的用户密码\x0d\\x0d\如果不行的话 就用管理员账户执行\x0d\ chmod 755 文件名\x0d\\x0d\如果是自己的电脑 切换到root用户就可以 如果root用户没设密码不让切\x0d\就直接用sudu -i 切换 \x0d\\x0d\以上 *** 作都是说的在终端中的 *** 作
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)