Linux.ChinaUnix.net
ChinaUnix
|
Linux首页
|
新闻
|
博客
|
文章
|
专栏
|
新手
|
方案
|
图书
|
下载
|
人才
|
手册
|
wiki
|
搜索
会员:
密码:
免费注册
|
忘记密码
|
会员登录
|
搜索
请教Godbach版主(mmap用户态和内核态共享内存)
1
2
3
4
››
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux人才交流
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
最近访问的论坛 ...
《开源时代》2009.07月刊(有奖用户调查)
|
系统架构师大会诚邀大家参与者
|
IBM嘉年华活动颁奖倒计时
|
"CU伴我行"八周年有奖征集图文活动
|
联合挑战之“大话WEB应用交付”
‹‹ 上一主题
|
下一主题 ››
[
打印
] [
订阅
] [
收藏
] [
本帖文本页
] [
推荐此主题给朋友,立即获积分
]
ubuntuer
天使
CU编号: 745494
注册:2008-8-15
最后登录: 2009-07-04
帖子:
1264
精华:0
可用积分:1441 (家境小康)
信誉积分:20
专家积分:10 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
1楼
发表于 2009-1-1 20:05
拜读了你的帖子
http://linux.chinaunix.net/bbs/thread-1034670-1-5.html
我在我自己电脑上尝试了下:
发现没了create_proc_info_entry这个函数,我自己修改了下代码如下:可以make 也可以insmod但是运行用户态程序时
./mmap_user 'hello'
phymem_addr=0, phymem_size=0
Segmentation fault
dmesg的信息:
[18065.048108] mmap_user[11329]: segfault at ffffffff ip b7ed4da4 sp bfaec690 error 6 in libc-2.8.90.so[b7e5e000+158000]
[18068.692529] mmap_user[11330]: segfault at ffffffff ip b7e6fda4 sp bfe89a30 error 6 in libc-2.8.90.so[b7df9000+158000]
#
include
<
linux
/
version
.
h
>
#
include
<
linux
/
module
.
h
>
#
include
<
linux
/
proc_fs
.
h
>
#
include
<
linux
/
mm
.
h
>
#
define
PROC_MEMSHARE_DIR
"memshare"
#
define
PROC_MEMSHARE_PHYADDR
"phymem_addr"
#
define
PROC_MEMSHARE_SIZE
"phymem_size"
/*alloc one page. 4096 bytes*/
#
define
PAGE_ORDER 0
/*this value can get from PAGE_ORDER*/
#
define
PAGES_NUMBER 1
struct
proc_dir_entry
*
proc_memshare_dir
;
unsigned
long
kernel_memaddr
=
0
;
unsigned
long
kernel_memsize
=
0
;
/*static int proc_read_phymem_addr(char *page, char **start, off_t off, int count)
{
return sprintf(page, "%08lx\n", __pa(kernel_memaddr));
}
static int proc_read_phymem_size(char *page, char **start, off_t off, int count)
{
return sprintf(page, "%lu\n", kernel_memsize);
}*/
static
int
__init init
(
void
)
{
/*build proc dir "memshare"and two proc files: phymem_addr, phymem_size in the dir*/
proc_memshare_dir
=
proc_mkdir
(
PROC_MEMSHARE_DIR
,
NULL
)
;
create_proc_entry
(
PROC_MEMSHARE_PHYADDR
,
0644
,
proc_memshare_dir
)
;
create_proc_entry
(
PROC_MEMSHARE_SIZE
,
0644
,
proc_memshare_dir
)
;
/*alloc one page*/
kernel_memaddr
=
__get_free_pages
(
GFP_KERNEL
,
PAGE_ORDER
)
;
if
(
!
kernel_memaddr
)
{
printk
(
"Allocate memory failure!\n"
)
;
}
else
{
SetPageReserved
(
virt_to_page
(
kernel_memaddr
)
)
;
kernel_memsize
=
PAGES_NUMBER
*
PAGE_SIZE
;
printk
(
"Allocate memory success!. The phy mem addr=%08lx, size=%lu\n"
,
__pa
(
kernel_memaddr
)
,
kernel_memsize
)
;
}
return
0
;
}
static
void
__exit fini
(
void
)
{
printk
(
"The content written by user is: %s\n"
,
(
unsigned
char
*
)
kernel_memaddr
)
;
ClearPageReserved
(
virt_to_page
(
kernel_memaddr
)
)
;
free_pages
(
kernel_memaddr
,
PAGE_ORDER
)
;
remove_proc_entry
(
PROC_MEMSHARE_PHYADDR
,
proc_memshare_dir
)
;
remove_proc_entry
(
PROC_MEMSHARE_SIZE
,
proc_memshare_dir
)
;
remove_proc_entry
(
PROC_MEMSHARE_DIR
,
NULL
)
;
return
;
}
module_init
(
init
)
;
module_exit
(
fini
)
;
MODULE_LICENSE
(
"GPL"
)
;
MODULE_AUTHOR
(
"Godbach (
nylzhaowei@163.com
)"
)
;
MODULE_DESCRIPTION
(
"Kernel memory share module."
)
;
先谢谢了
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
http://ubuntuer.cublog.cn欢迎做做
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
Godbach
(To be 千里马!)
版主-大法师
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:
8560
精华:
12
可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17
状态:...保密...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
2楼
发表于 2009-1-1 20:25
如果不使用proc文件的话,就不要保留这三行了
QUOTE:
proc_memshare_dir = proc_mkdir(PROC_MEMSHARE_DIR, NULL);
create_proc_entry(PROC_MEMSHARE_PHYADDR, 0644, proc_memshare_dir);
create_proc_entry(PROC_MEMSHARE_SIZE, 0644, proc_memshare_dir);
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
Godbach
(To be 千里马!)
版主-大法师
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:
8560
精华:
12
可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17
状态:...保密...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
3楼
发表于 2009-1-1 20:28
另外,insmod之后,看一下日志信息,日志信息里面应该记录了分配内存成功与否等相关信息
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
ubuntuer
天使
CU编号: 745494
注册:2008-8-15
最后登录: 2009-07-04
帖子:
1264
精华:0
可用积分:1441 (家境小康)
信誉积分:20
专家积分:10 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
4楼
发表于 2009-1-2 14:55
感谢你的恢复,那不用proc后,用户态如何知道怎么调用内存呢?
用户态程序何以知道该用那块内存?
[
本帖最后由 ubuntuer 于 2009-1-2 14:56 编辑
]
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
http://ubuntuer.cublog.cn欢迎做做
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
ubuntuer
天使
CU编号: 745494
注册:2008-8-15
最后登录: 2009-07-04
帖子:
1264
精华:0
可用积分:1441 (家境小康)
信誉积分:20
专家积分:10 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
5楼
发表于 2009-1-2 15:01
我觉得一定有替代的函数的...
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
http://ubuntuer.cublog.cn欢迎做做
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
ubuntuer
天使
CU编号: 745494
注册:2008-8-15
最后登录: 2009-07-04
帖子:
1264
精华:0
可用积分:1441 (家境小康)
信誉积分:20
专家积分:10 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
6楼
发表于 2009-1-2 15:42
res
=
create_proc_entry
(
PROC_MEMSHARE_PHYADDR
,
0
,
proc_memshare_dir
)
;
if
(
res
)
res
-
>
read_proc
=
proc_read_phymem_addr
;
res
=
create_proc_entry
(
PROC_MEMSHARE_SIZE
,
0
,
proc_memshare_dir
)
;
if
(
res
)
res
-
>
read_proc
=
proc_read_phymem_size
;
我查了下那个函数实际上相当于read_proc
这样dmesg的信息如下:
[ 3342.728521] Allocate memory success!. The phy mem addr=37b55000, size=4096
[ 3362.064879] Program mmap_user tried to access /dev/mem between 37b55000->37b56000.
[ 3362.064916] mmap_user[8763]: segfault at ffffffff ip b7ebbda4 sp bf8d3c70 error 6 in libc-2.8.90.so[b7e45000+158000]
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
http://ubuntuer.cublog.cn欢迎做做
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
Godbach
(To be 千里马!)
版主-大法师
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:
8560
精华:
12
可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17
状态:...保密...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
7楼
发表于 2009-1-2 15:47
QUOTE:
原帖由
ubuntuer
于 2009-1-2 15:01 发表
我觉得一定有替代的函数的...
应该是有替代函数的
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
Godbach
(To be 千里马!)
版主-大法师
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:
8560
精华:
12
可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17
状态:...保密...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
8楼
发表于 2009-1-2 15:56
QUOTE:
原帖由
ubuntuer
于 2009-1-2 14:55 发表
感谢你的恢复,那不用proc后,用户态如何知道怎么调用内存呢?
用户态程序何以知道该用那块内存?
我是看你代码中不用proc了,所以创建也就没有必要了。
本来就是需要通过一些机制把这两个值传出来了。要么使用proc,要么使用其他机制.
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
Godbach
(To be 千里马!)
版主-大法师
CU编号: 534931
注册:2007-3-9
最后登录: 2009-07-04
帖子:
8560
精华:
12
可用积分:22755 (巨富豪门)
信誉积分:112
专家积分:114 (本版:10)
空间积分:2
推广积分:17
状态:...保密...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
9楼
发表于 2009-1-2 15:59
QUOTE:
res = create_proc_entry (PROC_MEMSHARE_PHYADDR, 0, proc_memshare_dir);
if (res)
res->read_proc = proc_read_phymem_addr;
res = create_proc_entry (PROC_MEMSHARE_SIZE, 0, proc_memshare_dir);
if (res)
res->read_proc = proc_read_phymem_size;
res->read_proc是什么类型,能把proc_read_phymem_addr直接赋值吗??
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
明犯我强汉天威者,穷搜天下,万里追杀,覆其巢,断其苗裔,戮其身,追其魂,屠其魄,虽远必诛!
----------------------------------
一尺之槌,日取其半,万世不竭!
----------------------------------
欢迎光临Godbach的博客交流技术问题:
http://blog.chinaunix.net/u/33048/
----------------------------------
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
ubuntuer
天使
CU编号: 745494
注册:2008-8-15
最后登录: 2009-07-04
帖子:
1264
精华:0
可用积分:1441 (家境小康)
信誉积分:20
专家积分:10 (本版:0)
空间积分:0
推广积分:0
状态:
...离线...
[
个人空间
] [
短信
] [
博客
]
[
推广获积分
]
10楼
发表于 2009-1-2 16:55
你看dmesg的信息可以看到感觉都是对的阿
分配的以及用户态尝试写的
您对本贴的看法:
鲜花[0]
臭蛋[0]
__________________________________
http://ubuntuer.cublog.cn欢迎做做
YOCSEF“低排放绿色计算"报名中
|
【尚观研发课程8.8折,50000年薪起】
|
IBM嘉年华活动倒计时
|
嵌入式有奖书评,写书评,得大奖
首页
»
CU论坛
»
Linux
»
汇总贴列表
»
内核源码
»
1
2
3
4
››
请选择您要去的论坛 ←
>新手园地
>系统管理
>网络问题
>硬件支持
>内核问题
>系统互操作专区
>中文支持
>桌面与办公
>影音娱乐
>网络工具
>编程问题
>内核源码
>CPU与编译器
>嵌入式开发
>驱动开发
>数据库应用
>服务器应用
>安全防护
>集群和虚拟机
>开源业界与评论
>贴图娱乐
>红茶馆
>文档专区
>下载共享
>Linux书友会
>Linux人才交流
>Linux站务交流
===============
→ 操作系统技术交流区 ←
>BSD
>Solaris
>SCO UNIX
>HP-UX
>AIX
>IBM AS400应用论坛
>Tru64 UNIX
>IRIX
>Mac OS X
→ 行业解决方案交流区 ←
> 金融行业
> 电信行业
> 互联网行业
> 医卫行业
> 制造行业
> 信息安全
> 教育行业
> 媒体娱乐行业
> 电子政务
> 交通行业
→ 程序设计交流区 ←
>C/C++
>Shell
>Java
>Php
>Perl
>Python
>Web开发
>软件工程
>中间件技术
>GUI编程
>软件配置管理
>VOIP开发技术
→ 网管技术交流区 ←
>网络安全
>网络技术
>Cisco技术
>存储备份之家
>服务器及硬件技术
→ 数据库技术交流区 ←
>MySQL
>PostgreSQL
>Oracle
>Informix
>Sybase
>DB2
→ 应用技术专题交流区 ←
>Web服务器
>Mail服务器
>FTP服务器
>DNS服务器
>Proxy服务器
>LDAP
>VPN
>Lotus
>Samba
→ IT综合交流区 ←
>IT业界新闻与评论
>IT职业生涯
>IT培训与认证
>IT二手大厅
>IT图书与评论
→ IT人的休闲生活交流区 ←
>清茶斋
>运动地带
>快乐数码摄影
>影音文字
>English Forum
>游戏玩家
>旅游天下
>贴图娱乐
>红茶馆
>IT爱车族
→ 站务及频道交流区 ←
>站务交流
>版主会议室
>Linux站务交流
>Linux版主会议室
>博客站务交流区
>下载频道交流区
>CU活动专区
Copyright © 2001-2008 ChinaUnix.net All Rights Reserved 联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处
京ICP证041476号
清除 Cookies
-
Linux时代
-
Archiver
-
WAP
-
TOP
Processed in 0.084338 second(s), 5 queries , Gzip enabled