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