SpareNet Servers Advertising & Link Exchange

اطلاعیه

بستن
هیچ اطلاعیه ای هنوز ایجاد نشده است .

...::: اموزش جامع ماژول نویسی کرنل :::....

بستن
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
نوشته‌های جدید

  • ...::: اموزش جامع ماژول نویسی کرنل :::....

    به نام خدا


    باسلام

    میخوایم در این تاپیک به اموزش ساخت ماژول کرنل بپردازیم 


    برای شروع نیازهست هدر های کرنل مربوط رو نصب بکنید . 


    کد:
     apt-get install build-essential linux-headers-$(uname -r)
    ما در اینجا با زبان c میخواهیم یک ماژول طراحی بکنیم که در خروجی به ما سلام دنیا را نشان بدهد . 

    اول از همه باید هدر های کرنل رو وارد بکنیم

    کد:
    #include <linux/module.h>    // included for all kernel modules
    #include <linux/kernel.h>    // included for KERN_INFO
    #include <linux/init.h>      // included for __init and __exit macros
     معمولا برای ماژول باید نوع لایسنس و نام سازنده و توضیحاتی درباره ان را نوشت 
     


    کد:
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("Iranchak");
    MODULE_DESCRIPTION("A Simple Hello World module");
    خب حالا شروع به نوشتن کدمون میکنیم 

     


    کد:
    static int __init hello_init(void)
    {
        printk(KERN_INFO "Hello world!\n");
        return 0;   
    }

    در اینجا ما init رو صدا میزنیم و مقدار خروجی KERN_INFO رو برابر سلام دنیا قرار میدیم 

    برای خارج کردن کرنل هم یک نوشته ای قرار میدیم که بفهمیم ماژول کاملا از کرنل جدا شده 

     

    کد:
    static void __exit hello_cleanup(void)
    {
        printk(KERN_INFO "Cleaning up module.\n");
    }
     


    کد:
    module_init(hello_init);
    module_exit(hello_cleanup);


    خب ما یک فایل makefile برای کامپایل ماژول درست میکنیم و تنظیمات مورد نیاز رو در اون اعمال میکنیم 

    کد:
    obj-m += hello.o
    
    all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

    برای makefile ما تعریف کردیم که فایل کامپایل شده رو در مسیر کتابخانه ماژول های کرنل قرار بده 

    خب دستور make رو اجرا میکنیم تا ماژول کامپایل بشه .

    خروجی :
     

    کد:
    # make
    
    make -C /lib/modules/3.5.0-19-generic/build M=/home/iranhack/a modules
    make[1]: Entering directory `/usr/src/linux-headers-3.5.0-19-generic'
      CC [M]  /home/iranhack/a/hello.o
      Building modules, stage 2.
      MODPOST 1 modules
      CC      /home/iranhack/a/hello.mod.o
      LD [M]  /home/iranhack/a/hello.ko
    make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-19-generic'

    برای اضافه کردن ماژول به کرنل از دستور :
     

    کد:
    insmod hello.ko
    استفاده میکنیم برای اینکه مقدار خروجی رو مشاهده بکنیم با دستور زیر میتونیم مقدار ان را مشاهده کرد 

     


    کد:
    # insmod hello.ko
    
    # dmesg | tail -1
    [ 8394.731865] Hello world!
    
    # rmmod hello.ko
    
    # dmesg | tail -1
    [ 8707.989819] Cleaning up module.

    از دستور rmmod به عنوان جدا کردن ماژول از کرنل استفاده میشه


    از دستور modinfo برای  دیدن اطلاعات ماژول استفاده میشه . به شکل زیر 

    کد:
    modinfo /lib/modules/3.5.0-19-generic/kernel/fs/squashfs/squashfs.ko
    
    filename:       /lib/modules/3.5.0-19-generic/kernel/fs/squashfs/squashfs.ko
    license:        GPL
    author:         Phillip Lougher 
    description:    squashfs 4.0, a compressed read-only filesystem
    srcversion:     89B46A0667BD5F2494C4C72
    depends:        
    intree:         Y
    vermagic:       3.5.0-19-generic SMP mod_unload modversions 686
     
    امیدوارم از این اموزش لذت برده باشید

    با تشکر   
    [align=center][/align]
    [align=center][/align]
صبر کنید ..
X