Mod aaa-12 共享内存管理驱动程序
RCA: SOL: 修改人:huangxin 检视人:huangxin
This commit is contained in:
parent
292400e7de
commit
6bb080a18c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue