第一个linux驱动程序,hello

前面已经把学习linux的开发环境搭建好了,现在逐步开始学习开发过程。先从内核驱动开始,写一个网上已经被写烂的实列程序。先把它编译好,放进linux系统运行,看看是什么样子。

创建文件夹hello,在文件夹下面创建文件hello.c代码如下:

#include
#include
#include

static int hello_init(void)
{
    printk("hello world!\n");
    return 0;
}

static void hello_exit(void)
{
    printk("see you next time!\n");
    return;
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("youself");

Makefile文件代码如下:

obj-m:=hello.o
mymodule-objs:=module
KDIR?=
default:
        make -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        make -C $(KDIR) SUBDIRS=$(PWD) clean

在hello目录,直接执行命令,make KDIR=/home/jqh/work/linux-4.16.18 ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi-,得到可执行程序hello.ko。(提示:KDIR指向自己的内核路径)

第一个linux驱动程序,hello_第1张图片

得到hello.ko文件后,准备打包进ramdisk文件系统。利用qemu启动Linux系统后,装载驱动Hello.ko文件。

打包进文件系统,具体方法如图:

然后用qemu启动Linux,执行命令,qemu-system-arm -M virt -cpu cortex-a15 -m 256 -kernel arch/arm/boot/zImage -nographic -append "root=/dev/ram0 console=ttyAMA0" -initrd ../rootfs_test/ramfs,启动后查看我们放进去的Hello.ko文件是否存在。

insmod我们刚才编译的hello.ko文件,看看结果是什么。先使用dmesg -c把一些缓存打印信息清除,方便查看hello模块的信息。第一个linux驱动程序,hello_第2张图片

可以看到我们新写的驱动程序Hello.ko已经成功添加进Linux内核,第一个驱动程序看样子还是比较简单嘛。

 

 

 

你可能感兴趣的:(linux学习笔记)