1. 程式人生 > >第一個linux驅動程式,hello

第一個linux驅動程式,hello

前面已經把學習linux的開發環境搭建好了,現在逐步開始學習開發過程。先從核心驅動開始,寫一個網上已經被寫爛的實列程式。先把它編譯好,放進linux系統執行,看看是什麼樣子。

建立資料夾hello,在資料夾下面建立檔案hello.c程式碼如下:

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

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指向自己的核心路徑)

得到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模組的資訊。

可以看到我們新寫的驅動程式Hello.ko已經成功新增進Linux核心,第一個驅動程式看樣子還是比較簡單嘛。