linux驱动之Hello World

首先需要编译一份linux内核并使之运行起来,然后开始第一个驱动程序Hello World的实践。

1、新建一个目录并新建hello.c文件

参考LLD3上的代码。
注意代码中的tab键位置不要用空格代替,会出问题,具体原因还不了解。
并且tab键要调成4个空格大小,ubuntu的gedit编辑器默认是8个。

#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
    printk(KERN_ALERT "Hello, World\n");
    return 0;
}
static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, World\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");

2、在同一个目录下新建Makefile

新建Makefile文件,文件名不要随意改动,据说会有问题。例如:makefile是不行的。
注意KERNELDIR := 后的路径要写自己modules目录里的相应位置。
同样需要注意tab

ifeq ($(KERNELRELEASE),)
    KERNELDIR := /lib/modules/4.14.6/build
    PWD := $(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
else
    obj-m := hello.o
endif

3、编译测试

在hello.c这个目录中打开终端,切换到root模式,依次执行以下三条命令

make
insmod ./hello.ko
rmmod hello

如果在insmod命令后终端打印了“Hello World”,并且rmmod命令后打印了“Goodbye World”,那么这部分就结束了。如果很不幸的没有打印出来就到/var/log/kern.org里看一下。这是由于系统传递消息机制的不同,输出到了系统日志文件中。据说不同的系统文件名可能略有不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值