0
点赞
收藏
分享

微信扫一扫

PC上编译单个驱动

新建一个hello目录,写个hello world 驱动 hello.c

#include <linux/init.h>

#include <linux/module.h>

static int hello_init(void)

{

printk( "Hello, world\n");

return 0;

}

static void hello_exit(void)

{

printk( "Goodbye, world\n");

}

MODULE_LICENSE("GPL");

module_init(hello_init);

module_exit(hello_exit);

在写个Makefile

ifneq ($(KERNELRELEASE),)

obj-m:=hello.o

else

KERNELDIR:=/work/sdk/linux/s700-3/owl/out/s700_debian_s700_cb7/kernel

PWD:=$(shell pwd)

default:

          $(MAKE) ARCH=arm64 CROSS_COMPILE=/work/sdk/linux/s700-3/toolchain/aarch64-linux-gnu/bin/aarch64-linux-gnu- -C $(KERNELDIR) M=$(PWD) modules

clean:

          rm -rf *.o *.mod.c *.mod.o *.ko .*.cmd modules.order Module.symvers .tmp_versions

endif

注意:修改 KERNELDIR:= 后面应修改成自己的内核源码目录路径。obj-m:= 后面应为驱动名

字,后缀.o 。 $(MAKE) 前面为 Tab 缩进。


Makefile 脚本里已经将处理器的架构和交叉编译工具写上。

用 Make 命令来编译程序:

1)ARCH=arm64 表示 ARCH 给出了目标处理器的架构这里用的是 arm 处理器。

2)CROSS_COMPILE 给出了编译程序所用的交叉工具链的名称,比如:

CROSS_COMPILE=aarch64-linux-gnu-

3)-C $(KERNELDIR) 指明跳转到内核源码目录下读取那里的 Makefile

4) M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的 Makefile


最后make  ,生成ko文件

举报

相关推荐

0 条评论