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 include ../../Common/def.Makefile
# target name, the target name must have the same name of c source file # target name, the target name must have the same name of c source file
TARGET_NAME=shm_dev TARGET_NAME=shmdev
# target # target
# for linux module driver: KO # 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") #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); proc_api_init(PROC_API_DIR_NAME);
if(proc_api_register(&g_ProcApi) != ERR_DBGFS_NO_ERROR) { 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) 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_unregister(&g_ProcApi);
proc_api_uninit(PROC_API_DIR_NAME); proc_api_uninit(PROC_API_DIR_NAME);

View File

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

View File

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

View File

@ -145,12 +145,12 @@ static struct file_operations shmdev_fops = {
* @return * @return
* @date 2019/08/07 * @date 2019/08/07
*/ */
static int shmdev_module_init(void) static int __init shmdev_module_init(void)
{ {
struct page *p = NULL; struct page *p = NULL;
dev_t dev = 0; 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) { 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_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)); 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) { if(g_shm_dev->mem_buf == NULL) {
printk(KERN_ERR "Malloc %d pages error\n", get_order(g_shm_dev->mem_size)); printk(KERN_ERR "Malloc %d pages error\n", get_order(g_shm_dev->mem_size));
kfree(g_shm_dev); kfree(g_shm_dev);
@ -184,7 +187,7 @@ static int shmdev_module_init(void)
for(p = virt_to_page(g_shm_dev->mem_buf); 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 < virt_to_page(g_shm_dev->mem_buf + g_shm_dev->mem_size);
p++) { p++) {
SetPageReserved(virt_to_page(p)); SetPageReserved(p);
} }
memset(g_shm_dev->mem_buf, 0, g_shm_dev->mem_size); 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"); 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), 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 接口 // 初始化 proc 接口
shmdev_proc_init(); shmdev_proc_init();
@ -213,7 +216,7 @@ static void __exit shmdev_module_exit(void)
{ {
struct page *p = NULL; 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(); shmdev_proc_uninit();
@ -226,7 +229,7 @@ static void __exit shmdev_module_exit(void)
for(p = virt_to_page(g_shm_dev->mem_buf); 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 < virt_to_page(g_shm_dev->mem_buf + g_shm_dev->mem_size);
p++) { 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)); 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_exit(shmdev_module_exit);
MODULE_LICENSE("Dual BSD/GPL"); MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION("0.1");
#endif // __KERNEL__ #endif // __KERNEL__

View File

@ -8,6 +8,10 @@ MODULE_INFO(name, KBUILD_MODNAME);
__visible struct module __this_module __visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = { __attribute__((section(".gnu.linkonce.this_module"))) = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
.arch = MODULE_ARCH_INIT, .arch = MODULE_ARCH_INIT,
}; };
@ -18,16 +22,34 @@ MODULE_INFO(retpoline, "Y");
static const struct modversion_info ____versions[] static const struct modversion_info ____versions[]
__used __used
__attribute__((section("__versions"))) = { __attribute__((section("__versions"))) = {
{ 0x4bb34cb8, __VMLINUX_SYMBOL_STR(module_layout) }, { 0xe4d09796, __VMLINUX_SYMBOL_STR(module_layout) },
{ 0x566494e1, __VMLINUX_SYMBOL_STR(seq_puts) }, { 0x6bc3fbc0, __VMLINUX_SYMBOL_STR(__unregister_chrdev) },
{ 0x1e4a66ce, __VMLINUX_SYMBOL_STR(seq_printf) }, { 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) }, { 0x27e1a049, __VMLINUX_SYMBOL_STR(printk) },
{ 0x3fd8cea8, __VMLINUX_SYMBOL_STR(proc_api_register) }, { 0xfadf2436, __VMLINUX_SYMBOL_STR(memstart_addr) },
{ 0x4f77ae3a, __VMLINUX_SYMBOL_STR(proc_api_unregister) }, { 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[] static const char __module_depends[]
__used __used
__attribute__((section(".modinfo"))) = __attribute__((section(".modinfo"))) =
"depends=procapi"; "depends=";
MODULE_INFO(srcversion, "B517C1CF2D4EBAC4C20ABF2");