1. 程式人生 > >am335x helloworld 核心模組

am335x helloworld 核心模組

1   .c原始碼

#include <linux/kernel.h>

  #include <linux/init.h>

  #include<linux/module.h>

   static int hello_init(void)

   {

       printk(KERN_INFO "[init] Can you feelmei?  I am ready to installarm_hello....\n");

       return 0;

   }

   

  static int hello_exit(void)

  {

    printk(KERN_INFO "[exit] Yes. I can feel you.....I am read to leavearm_hello......\n");

          return 0;

 }

 module_init(hello_init);

 module_exit(hello_exit);

 

 MODULE_AUTHOR("Tbao  -invt company-");

 MODULE_LICENSE("GPL");

 MODULE_DESCRIPTION("Asimple arm Hello World Module");

 MODULE_ALIAS("A simple arm module");

 

 

2.Makefile

在核心原始碼中./drivers/test/中Makefile,在該目錄下單獨編譯核心模組。

Ti335x Armv7開發板下:

 obj-m += hello.o

 CURRENT_PATH :=$(shell pwd)

 LINUX_KERNEL :=$(shell uname -r)

 LINUX_KERNEL_PATH:=/usr/local/ti-sdk-am335x-evm/board-support/linux-3.2.0-psp04.06.00.11

 all:

      make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH)ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  modules

 clean:

      make -C $(LINUX_KERNEL_PATH)M=$(CURRENT_PATH) clean

 

Ps:在單獨編譯核心的時候:出現以下報錯

WARNING:Symboversion dump/usr/local/ti-sdk-am335x-evm/board-support/linux-3.2.0-psp04.06.00.11/

Module.symvers is missing; modules willhave no dependencies and modversions.

是需要先進行核心編譯,在核心原始碼根目錄下生成Module.symvers,在編輯核心模組就不錯了。

在目標機上安裝模組時:出錯,是核心版本校驗,核心版本不對。

[email protected]:/mnt#insmod hello.ko

[9293.451572] hello: module_layout: kernel tainted.

[9293.456587] Disabling lock debugging due to kernel taint

[9293.462161] hello: version magic '3.2.0 mod_unload ARMv5 p2v8 'should be '3.2.0 mod_unload modversions ARMv7 p2v8 '

Error: couldnot insert module hello.ko: Invalid module formats

 

107.792110] hello: version magic ' 3.2.0mod_unload modversions ARMv7 p2v8 ' should be '3.2.0 mod_unload modversionsARMv7 p2v8 '

Error: couldnot insert module hello.ko: Invalid module format

 

3.改核心:

Include/linux中的Vermagic.h:  控制版本的是巨集

 

#if 0

//-------Tbao----à>20170828

#define VERMAGIC_STRING                                                \

         UTS_RELEASE" "                                                             \

         MODULE_VERMAGIC_SMPMODULE_VERMAGIC_PREEMPT                        \

         MODULE_VERMAGIC_MODULE_UNLOADMODULE_VERMAGIC_MODVERSIONS      \

         MODULE_ARCH_VERMAGIC

//<<-------Tbao----------

#endif

/************新增*************下面符合開發板的****/

#define VERMAGIC_STRING    "3.2.0 mod_unload modversions ARMv7p2v8 "

注意不要有空格等。。。。。。。。

 

3.安裝模組

dmesg | grep 可以檢視載入模組中的資訊。

insmod 載入模組

rmmod 解除安裝模組

lsmod 列出已經載入模組和資訊

modinfo 檢視模組資訊

 cat   /proc/devices