在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > hello內核模塊編譯的全過程

            hello內核模塊編譯的全過程

            作者: 時間:2011-02-24 來源:網絡 收藏

            內核版本:2.6.10

            在/home/tmp/下建立兩個文件hello.c,Makefile

            hello.c
            ------------
            #include linux/init.h>
            #include linux/kernel.h>
            #include linux/module.h>

            MODULE_LICENSE("GPL");

            static int hello_init(void)
            {
            printk(KERN_ALERT "hello module initn");
            return 0;
            }

            static void hello_exit(void)
            {
            printk(KERN_ALERT "hello module exitn");
            }

            module_init(hello_init);
            module_exit(hello_exit);

            --------------

            Makefile
            ----------
            ifneq ($(KERNELRELEASE),)
            obj-m := hello.o
            else
            KERNELDIR := /lib/modules/$(shell uname -r)/build
            PWD := $(shell pwd)

            default:
            $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
            endif

            clean:
            rm -f *.ko *.mod.c *.mod.o *.o

            -----------
            編譯模塊

            #make

            清除

            #make clean

            -----------

            為了能夠在終端顯示信息,要修改
            /lib/modules/2.6.10/build/include/linux/kernel.h
            文件的KERN_ALERT宏。
            #define KERN_ALERT "1>"
            修改為
            #define KERN_ALERT "0>"

            ------------
            安裝模塊

            #insmod hello.ko

            終端顯示
            hello module init

            查看已安裝的模塊
            #lsmod

            卸載模塊

            #rmmod hello

            終端顯示
            hello module exit

            -----------
            有以下幾點要注意:
            1,hello.c文件中調用的頭文件
            init.h中的module_init(),module_exit()
            kernel.h中的printk(),KERN_ALERT
            module.h中的MODULE_LICENSE()

            2,Makefile文件中的核心是
            $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
            1),-C $(KERNELDIR)
            表示在$(KERNELDIR)目錄下執(zhí)行make命令。
            2),M=$(PWD)
            表示包含$(PWD)下的Makefile文件。
            3),modules
            表示模塊編譯。
            4), 用到了ifneq...else...endif語句
            由于開始還沒定義KERNELRELEASE,所以只能執(zhí)行else分支。
            而在執(zhí)行
            $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
            后,會在內核的Makefile中定義KERNELRELEASE,當進入本Makefile時,
            則只會執(zhí)行ifneq的第一個分支,即
            obj-m := hello.o
            這一句話是非常重要的。事實上,這個Makefile做的本份工作就是它。
            我們也可以用命令行的方式來編譯:

            在Makefile中的內容寫為:
            obj-m := hello.o
            然后在終端敲入:
            #make -C /lib/modules/2.6.10/build M=/home/tmp modules


            linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

            linux相關文章:linux教程




            評論


            相關推薦

            技術專區(qū)

            關閉