Mod aaa-12 共享内存管理驱动程序

RCA:
SOL:
修改人:huangxin
检视人:huangxin
This commit is contained in:
黄昕 2019-09-16 17:01:25 +08:00
parent 292400e7de
commit 6bb080a18c
6 changed files with 60 additions and 34 deletions

View File

@ -1,6 +1,6 @@
include ../../Common/def.Makefile
# target name, the target name must have the same name of c source file
TARGET_NAME=shm_dev
TARGET_NAME=shmdev
# target
# for linux module driver: KO

View File

@ -469,9 +469,9 @@ static const struct file_operations g_DbgSeq_fops = {
#define VERSION ("v0.0.0.2")
static int api_module_init(void)
static int __init api_module_init(void)
{
printk(KERN_ALERT "Hello ISG PROC API version: %s\n", VERSION);
printk(KERN_INFO "Hello ISG PROC API version: %s\n", VERSION);
proc_api_init(PROC_API_DIR_NAME);
if(proc_api_register(&g_ProcApi) != ERR_DBGFS_NO_ERROR) {
@ -484,7 +484,7 @@ module_init(api_module_init);
static void __exit api_module_exit(void)
{
printk(KERN_ALERT "Bye ISG PROC API version: %s\n", VERSION);
printk(KERN_INFO "Bye ISG PROC API version: %s\n", VERSION);
proc_api_unregister(&g_ProcApi);
proc_api_uninit(PROC_API_DIR_NAME);

View File

@ -22,27 +22,27 @@ MODULE_INFO(retpoline, "Y");
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0x4bb34cb8, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0x3b74fa7, __VMLINUX_SYMBOL_STR(kmalloc_caches) },
{ 0xe4d09796, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0xeaedd2a4, __VMLINUX_SYMBOL_STR(kmalloc_caches) },
{ 0xd2b09ce5, __VMLINUX_SYMBOL_STR(__kmalloc) },
{ 0x194d04a9, __VMLINUX_SYMBOL_STR(single_open) },
{ 0xe339346f, __VMLINUX_SYMBOL_STR(single_open) },
{ 0x98cf60b3, __VMLINUX_SYMBOL_STR(strlen) },
{ 0x1b17e06c, __VMLINUX_SYMBOL_STR(kstrtoll) },
{ 0x5a219335, __VMLINUX_SYMBOL_STR(single_release) },
{ 0x566494e1, __VMLINUX_SYMBOL_STR(seq_puts) },
{ 0x109f233d, __VMLINUX_SYMBOL_STR(single_release) },
{ 0x3caaf46c, __VMLINUX_SYMBOL_STR(seq_puts) },
{ 0x7b6646bb, __VMLINUX_SYMBOL_STR(_raw_read_lock) },
{ 0x84bc974b, __VMLINUX_SYMBOL_STR(__arch_copy_from_user) },
{ 0x1e4a66ce, __VMLINUX_SYMBOL_STR(seq_printf) },
{ 0x73948fc9, __VMLINUX_SYMBOL_STR(remove_proc_entry) },
{ 0x334b34ff, __VMLINUX_SYMBOL_STR(seq_printf) },
{ 0xa988ff28, __VMLINUX_SYMBOL_STR(remove_proc_entry) },
{ 0x85df9b6c, __VMLINUX_SYMBOL_STR(strsep) },
{ 0xa87cf413, __VMLINUX_SYMBOL_STR(clear_bit) },
{ 0x91715312, __VMLINUX_SYMBOL_STR(sprintf) },
{ 0xbc070157, __VMLINUX_SYMBOL_STR(seq_read) },
{ 0x87d60b72, __VMLINUX_SYMBOL_STR(seq_read) },
{ 0xe2d5255a, __VMLINUX_SYMBOL_STR(strcmp) },
{ 0x23639be4, __VMLINUX_SYMBOL_STR(PDE_DATA) },
{ 0x547a32b3, __VMLINUX_SYMBOL_STR(PDE_DATA) },
{ 0x60ea2d6, __VMLINUX_SYMBOL_STR(kstrtoull) },
{ 0xdcb764ad, __VMLINUX_SYMBOL_STR(memset) },
{ 0x8cc82f72, __VMLINUX_SYMBOL_STR(proc_mkdir) },
{ 0xb5c8f21d, __VMLINUX_SYMBOL_STR(proc_mkdir) },
{ 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
{ 0x449ad0a7, __VMLINUX_SYMBOL_STR(memcmp) },
{ 0xa58dee99, __VMLINUX_SYMBOL_STR(_raw_write_unlock) },
@ -50,10 +50,10 @@ __attribute__((section("__versions"))) = {
{ 0x9166fada, __VMLINUX_SYMBOL_STR(strncpy) },
{ 0x5a921311, __VMLINUX_SYMBOL_STR(strncmp) },
{ 0x1ea06663, __VMLINUX_SYMBOL_STR(_raw_write_lock) },
{ 0x4683a7cf, __VMLINUX_SYMBOL_STR(kmem_cache_alloc) },
{ 0xd417b009, __VMLINUX_SYMBOL_STR(remove_proc_subtree) },
{ 0x537c1b11, __VMLINUX_SYMBOL_STR(proc_create_data) },
{ 0x79ad9fc3, __VMLINUX_SYMBOL_STR(seq_lseek) },
{ 0xf2b9d238, __VMLINUX_SYMBOL_STR(kmem_cache_alloc) },
{ 0x2e1dbdc1, __VMLINUX_SYMBOL_STR(remove_proc_subtree) },
{ 0x11bedc8, __VMLINUX_SYMBOL_STR(proc_create_data) },
{ 0xa7acf2bc, __VMLINUX_SYMBOL_STR(seq_lseek) },
{ 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
{ 0x4829a47e, __VMLINUX_SYMBOL_STR(memcpy) },
{ 0xae8c4d0c, __VMLINUX_SYMBOL_STR(set_bit) },
@ -66,4 +66,4 @@ __attribute__((section(".modinfo"))) =
"depends=";
MODULE_INFO(srcversion, "99A9F53ADADFBF43F95BFE5");
MODULE_INFO(srcversion, "E39F884295B153011ADFF0C");

View File

@ -1,7 +1,7 @@
ifneq ($(KERNELRELEASE), )
obj-m := shm_dev.o
shm_dev-objs += shm_dev.o shm_proc.o
KBUILD_EXTMOD := /home/hx/secogateway/Product/modules/proc_api
obj-m := shmdev.o
shmdev-objs += shm_dev.o shm_proc.o
#KBUILD_EXTMOD := /home/hx/secogateway/Product/modules/proc_api
else
#KDIR ?= /opt/fsl-kernel/x86/linux-4.9.140
#KDIR ?= /home/hx/raspberrypi/linux

View File

@ -145,12 +145,12 @@ static struct file_operations shmdev_fops = {
* @return
* @date 2019/08/07
*/
static int shmdev_module_init(void)
static int __init shmdev_module_init(void)
{
struct page *p = NULL;
dev_t dev = 0;
printk(KERN_INFO "Hello ISG objects manager version: %s\n", SHMDEV_VERSION);
printk(KERN_INFO "Hello ISG share memory manager version: %s\n", SHMDEV_VERSION);
// 自动分配设备版本号
if(alloc_chrdev_region(&dev, 0, 1, SHM_DEV_NAME) != 0) {
@ -174,6 +174,9 @@ static int shmdev_module_init(void)
g_shm_dev->mem_size = PAGE_ALIGN(SHM_MEM_SIZE);
g_shm_dev->mem_buf = (unsigned char *)__get_free_pages(GFP_KERNEL, get_order(g_shm_dev->mem_size));
//printk("1g_shm_dev->mem_buf(%u): %p\n", g_shm_dev->mem_size, g_shm_dev->mem_buf);
if(g_shm_dev->mem_buf == NULL) {
printk(KERN_ERR "Malloc %d pages error\n", get_order(g_shm_dev->mem_size));
kfree(g_shm_dev);
@ -184,7 +187,7 @@ static int shmdev_module_init(void)
for(p = virt_to_page(g_shm_dev->mem_buf);
p < virt_to_page(g_shm_dev->mem_buf + g_shm_dev->mem_size);
p++) {
SetPageReserved(virt_to_page(p));
SetPageReserved(p);
}
memset(g_shm_dev->mem_buf, 0, g_shm_dev->mem_size);
@ -194,7 +197,7 @@ static int shmdev_module_init(void)
g_shm_dev->dev_class = class_create(THIS_MODULE, "obj");
// 创建字符设备节点
device_create(g_shm_dev->dev_class, NULL, MKDEV(g_shm_dev->dev_major, 0),
NULL, "isg_objs/dev%d", 0);
NULL, "isg_objs/shm%d", 0);
// 初始化 proc 接口
shmdev_proc_init();
@ -213,7 +216,7 @@ static void __exit shmdev_module_exit(void)
{
struct page *p = NULL;
printk(KERN_INFO "Bye ISG objects manager version: %s\n", SHMDEV_VERSION);
printk(KERN_INFO "Bye ISG share memory manager version: %s\n", SHMDEV_VERSION);
shmdev_proc_uninit();
@ -226,7 +229,7 @@ static void __exit shmdev_module_exit(void)
for(p = virt_to_page(g_shm_dev->mem_buf);
p < virt_to_page(g_shm_dev->mem_buf + g_shm_dev->mem_size);
p++) {
ClearPageReserved(virt_to_page(g_shm_dev->mem_buf));
ClearPageReserved(p);
}
free_pages((unsigned long)g_shm_dev->mem_buf, get_order(g_shm_dev->mem_size));
@ -241,4 +244,5 @@ static void __exit shmdev_module_exit(void)
module_exit(shmdev_module_exit);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("0.1");
#endif // __KERNEL__

View File

@ -8,6 +8,10 @@ MODULE_INFO(name, KBUILD_MODNAME);
__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT,
};
@ -18,16 +22,34 @@ MODULE_INFO(retpoline, "Y");
static const struct modversion_info ____versions[]
__used
__attribute__((section("__versions"))) = {
{ 0x4bb34cb8, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0x566494e1, __VMLINUX_SYMBOL_STR(seq_puts) },
{ 0x1e4a66ce, __VMLINUX_SYMBOL_STR(seq_printf) },
{ 0xe4d09796, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0x6bc3fbc0, __VMLINUX_SYMBOL_STR(__unregister_chrdev) },
{ 0xeaedd2a4, __VMLINUX_SYMBOL_STR(kmalloc_caches) },
{ 0x3caaf46c, __VMLINUX_SYMBOL_STR(seq_puts) },
{ 0x334b34ff, __VMLINUX_SYMBOL_STR(seq_printf) },
{ 0xd2ba756e, __VMLINUX_SYMBOL_STR(device_destroy) },
{ 0x2aeaa150, __VMLINUX_SYMBOL_STR(__register_chrdev) },
{ 0xa87cf413, __VMLINUX_SYMBOL_STR(clear_bit) },
{ 0xdcb764ad, __VMLINUX_SYMBOL_STR(memset) },
{ 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
{ 0x3fd8cea8, __VMLINUX_SYMBOL_STR(proc_api_register) },
{ 0x4f77ae3a, __VMLINUX_SYMBOL_STR(proc_api_unregister) },
{ 0xfadf2436, __VMLINUX_SYMBOL_STR(memstart_addr) },
{ 0x228f4555, __VMLINUX_SYMBOL_STR(kimage_voffset) },
{ 0xa4d920c2, __VMLINUX_SYMBOL_STR(device_create) },
{ 0xf2b9d238, __VMLINUX_SYMBOL_STR(kmem_cache_alloc) },
{ 0x93fca811, __VMLINUX_SYMBOL_STR(__get_free_pages) },
{ 0x4302d0eb, __VMLINUX_SYMBOL_STR(free_pages) },
{ 0x37a0cba, __VMLINUX_SYMBOL_STR(kfree) },
{ 0xd20eeceb, __VMLINUX_SYMBOL_STR(remap_pfn_range) },
{ 0xae8c4d0c, __VMLINUX_SYMBOL_STR(set_bit) },
{ 0x7ca7df01, __VMLINUX_SYMBOL_STR(class_destroy) },
{ 0x63bd414a, __VMLINUX_SYMBOL_STR(__class_create) },
{ 0x29537c9e, __VMLINUX_SYMBOL_STR(alloc_chrdev_region) },
};
static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=procapi";
"depends=";
MODULE_INFO(srcversion, "B517C1CF2D4EBAC4C20ABF2");