- 论坛徽章:
- 0
|
20可用积分
驱动部分
18
19 #include <stdio.h>
20 #include "smas_param.h" 32 MODULE_LICENSE("GPL");
33 #define MAJOR_NUM 201
34
35 unsigned long shmem_addr;
36 unsigned long shmem_phy_addr;
37 unsigned long shmem_pid=0xffff;
38 static int order = 0;
39 static ssize_t shmem_read(struct file *,char *,size_t,loff_t *);
40 static ssize_t shmem_write(struct file *,const char *,size_t,loff_t *);
41 static int shmem_open(struct inode *inode,struct file *file);
42 static int shmem_release(struct inode *inode,struct file *file);
43
44 struct file_operations shmem_fops=
45 {
46 read:shmem_read,
47 write:shmem_write,
48 open:shmem_open,
49 release:shmem_release,
50 };
51
52
53 static int __init shmem_init(void)
54 {
55 unsigned char *p_virt;
56 unsigned long p_phy;
57 unsigned int i;
58 pgd_t *dir;
59 pmd_t *pmdp;
60 pte_t *ptep;
ret=register_chrdev(MAJOR_NUM,"shmem",&shmem_fops);
66 if(ret)
67 {
68 printk("shmem register failure\n");
69 }
70 else
71 {
72 printk("shmem register success\n");
73 }
74 order = get_order(4*1024);
75 printk("order = %d,\n",order);
76 shmem_addr=__get_free_pages(GFP_KERNEL,10);
77
78 for (i = 0; i < 1024 ; i ++)
79 SetPageReserved(virt_to_page(shmem_addr + i * 4096));
80
81 printk("shmem_addr = %x\n",shmem_addr);
82 p_phy=virt_to_phys(shmem_addr);
83 shmem_phy_addr=p_phy;
84 printk("p_phy= %x\n",p_phy);
85
86 //
87 return 0;
88 }
89
90 static void __exit shmem_exit(void)
91 {
92 printk("shmem_exit\n");
93 unsigned int i;
94
95 for (i = 0; i < 1024 ; i ++)
96 ClearPageReserved(virt_to_page(shmem_addr + i * 4096));
97 free_pages(shmem_addr,10);
98 unregister_chrdev(MAJOR_NUM,"shmem");
99 }
应用部分
61 pgprot_t newprot;
62
63 int ret;
64
21
22 int main(int argc, char *argv[])
23 {
24 int i = 0;
25
26 printf("share_memory_init \n");
27
28 SMAS_Param * temp_t;
29 if (NULL == (temp_t = (SMAS_Param *)share_memory_init()))
30 {
31 printf("share_memory_init error! \n");
32 }
33
34 printf("share_memory_init ok \n");
35
36 while(1)
37 {
38 // for (i = 0; i < 10 ;i ++)
39 {
40 temp_t->system.system_value.camera[0].web_camera.camera_port += 1;
41 }
42 printf("\n");
43 sleep(2);
44 }
45
46
47 return 0;
48 } |
|