helloworld驱动的编译-3
Posted 杨斌并
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了helloworld驱动的编译-3相关的知识,希望对你有一定的参考价值。
helloworld驱动的编译
第一种方法:
把驱动编译成模块,然后使用命令把驱动加载到内核里面
第二种方法:
直接把驱动编译到内核
第一步:先写一个Makefile
obj-m +=helloworld.o
KOIR:=/home/topeet/ybb/android/itop-3399_8.1/kernel
PWD?=$(shell pwd)
all:
make -C $(KOIR) M=${PWD} modules
clean:
rm -rf *.o
rm -rf *.ko
rm -rf *.mod.c
rm -rf *.symvers
rm -rf *.order
第二部:编译驱动
编译驱动之前需要注意的问题
-
内核源码一定要先编译通过
-
我们编译驱动模块用的内核源码一定要和我们开发板上运行的内核镜像是同一套
-
看一下我们的Ubuntu 的环境是不是arm64
-
设置环境变量
export CROSS_COMPILE=/Users/lianfei/firmware_android/rk3399_linux_sdk_v2.0
/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
/bin/aarch64-linux-gnu-
export ARCH=ARM64
-
在Makefile的文件目录下执行make 命令
-
加载驱动模块使用insmod 命令
insmod helloworld.ko
卸载驱动使用 rmmod
rmmod helloworld
安装后的驱动在 sys/module 文件目录下
代码
- helloworld.c
#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void){
printk(KERN_EMERG "hello world enter");
return 0;
}
static void hello_exit(void){
printk(KERN_EMERG "hello world exit!");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("LIYU");
以上是关于helloworld驱动的编译-3的主要内容,如果未能解决你的问题,请参考以下文章