中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

        hello內(nèi)核模塊編譯的全過程

        作者: 時間:2011-02-24 來源:網(wǎng)絡(luò) 收藏

        內(nèi)核版本: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

        -----------
        有以下幾點(diǎn)要注意:
        1,hello.c文件中調(diào)用的頭文件
        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
        后,會在內(nèi)核的Makefile中定義KERNELRELEASE,當(dāng)進(jìn)入本Makefile時,
        則只會執(zhí)行ifneq的第一個分支,即
        obj-m := hello.o
        這一句話是非常重要的。事實(shí)上,這個Makefile做的本份工作就是它。
        我們也可以用命令行的方式來編譯:

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


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

        linux相關(guān)文章:linux教程




        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉