ARM-第七次

作者: 帅碧 | 来源:发表于2017-01-12 20:54 被阅读9次
Paste_Image.png

4.修改Makefile文件,复制mini2440_hello_module那一行之后,进行修改

Paste_Image.png

5.然后保存退出
6.编译:make zImage
7.进入config界面:make menuconfig

  • 选择Device Drivers --->
Paste_Image.png
  • 选择Character devices
Paste_Image.png
  • 选择My module sample,按空格键将M改为*号
Paste_Image.png

内核设备的编写

1.在用户自己创建的目录下:创建一个hello.c与Makefile的文件
2.在hello.c中

#include <linux/kernel.h>
#include <linux/module.h>

static int __init mini2440_hello_module_init(void)
{
    printk("Hello,Min2440 module is installed !\n");
    return 0;
}
static void __exit mini2440_hello_module_cleanup(void)
{
    printk("Good_bye,mini2440 module was removed!\n");
}
module_init(mini2440_hello_module_init);
module_exit(mini2440_hello_module_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jiang xiu bi");
MODULE_DESCRIPTION("This is example module!!");
MODULE_VERSION("V1.0.0");

  • 在Makefile中
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/jxb/1612/1/sq1612/linux-2.6.32.2
PWD :=$(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *.order
.PHONLY:modules modules_install clean
else
obj-m :=hello.o
#obj-m :=hello2.o
endif

  • 运行结果

3.代码升级,在hello.c中

#include <linux/kernel.h>
#include <linux/module.h>

//#define __init
//#define __exit
static int howmany=1;
static char * name="Jiang xiu bi";

static int __init mini2440_hello_module_init(void)
{
    printk("Hello,Min2440 module is installed !\n");
    printk("I am %s!\n",name);
    printk("I have %d mini2440 board!\n",howmany);
    return 0;
}
static void __exit mini2440_hello_module_cleanup(void)
{
    printk("Good_bye,mini2440 module was removed!\n");
}
module_init(mini2440_hello_module_init);
module_exit(mini2440_hello_module_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jiang xiu bi");
MODULE_DESCRIPTION("This is example module!!");
MODULE_VERSION("V1.0.0");

module_param(howmany,int,S_IRUGO);
module_param(name,charp,S_IRUGO);
EXPORT_SYMBOL(howmany);
EXPORT_SYMBOL(name);

  • 在Makefile中
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/jxb/1612/1/sq1612/linux-2.6.32.2
PWD :=$(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *.order
.PHONLY:modules modules_install clean
else
obj-m :=hello.o
#obj-m :=hello2.o
endif

  • 运行结果
Paste_Image.png Paste_Image.png
  1. 再升级版,两个模块的,在hello.c中
#include <linux/kernel.h>
#include <linux/module.h>

//#define __init
//#define __exit
static int howmany=1;
static char * name="Jiang xiu bi";

static int __init mini2440_hello_module_init(void)
{
    printk("Hello,Min2440 module is installed !\n");
    printk("I am %s!\n",name);
    printk("I have %d mini2440 board!\n",howmany);
    return 0;
}
static void __exit mini2440_hello_module_cleanup(void)
{
    printk("Good_bye,mini2440 module was removed!\n");
}
module_init(mini2440_hello_module_init);
module_exit(mini2440_hello_module_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jiang xiu bi");
MODULE_DESCRIPTION("This is example module!!");
MODULE_VERSION("V1.0.0");

module_param(howmany,int,S_IRUGO);
module_param(name,charp,S_IRUGO);
EXPORT_SYMBOL(howmany);
EXPORT_SYMBOL(name);

  • 在hello2.c中
#include <linux/kernel.h>
#include <linux/module.h>

//#define __init
//#define __
extern int howmany;
extern char * name;

static int __init mini2440_hello_module_init(void)
{
    printk("Hello,Min2440 module is installed !\n");
    printk("I am %s!\n",name);
    printk("I have %d mini2440 board!\n",howmany);
    return 0;
}
static void __exit mini2440_hello_module_cleanup(void)
{
    printk("Good_bye,mini2440 module was removed!\n");
}
module_init(mini2440_hello_module_init);
module_exit(mini2440_hello_module_cleanup);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jiang xiu bi");
MODULE_DESCRIPTION("This is example module!!");
MODULE_VERSION("V1.0.0");

  • 在Makefile中
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /home/jxb/1612/1/sq1612/linux-2.6.32.2
PWD :=$(shell pwd)
modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers *.order
.PHONLY:modules modules_install clean
else
obj-m :=hello.o
obj-m :=hello2.o
endif

  • 运行结果
    1.先运行模块1
Paste_Image.png

2.再运行模块2


Paste_Image.png

相关文章

  • ARM-第七次

    ### ARM驱动 程序的分种 1.直接运行在硬件上:裸机程序2.只能运行在对应的操作系统上:应用程序 操作系统 ...

  • ARM-指针认证

    一、介绍 2016年10月,ARMV8.3-A指令集中加入了指针认证(Pointer Authentication...

  • ARM-第五次

    ARM微处理器的工作状态 处理器状态 1.ARM状态:32位,这种状态下执行的是字方式的ARM指令2.Thumb状...

  • 2020-10-03

    第七次

  • 2018-02-10

    第七次作业

  • 2018-6-7

    第七次打卡。

  • 2017.05.17

    第七次打卡。

  • ARM-第六次

    ARM体系结构的数据存储格式 小端:低位放在低地址大端:低位放在高地址 指令长度及数据类型 1.CPU与内存之间的...

  • ARM-第三次

    命令回顾 串口命令 ls -l /dev/ttyUSB0sudo chmod 777 /dev/ttyUSB0mi...

  • ARM-第四次

    配置环境 将hello.c下载进开发板 不能运行,因为hello.c里面的头文件不适用与u-boot 在u-boo...

网友评论

    本文标题:ARM-第七次

    本文链接:https://www.haomeiwen.com/subject/pvrdbttx.html