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