常见问题常见问题   搜索搜索   会员列表会员列表   团队团队   注册注册    个人资料个人资料   登录查看您的站内信件登录查看您的站内信件   登录登录 

如何调试驱动?老是死机重启fsck可吃不消啊。

 
发表新文章   回复文章    FreeBSD China -> 设备驱动
阅读上一个主题 :: 阅读下一个主题  
作者 留言
syh
老妖


注册时间: 2010-05-02
文章: 1617
来自: 卡拉赞

文章发表于: Wed 2011-01-26 00:45:49    发表主题: 如何调试驱动?老是死机重启fsck可吃不消啊。 引用并回复

我把thinkpad的hdaps驱动移植到64位上,强制转换了几个数据,然后加载模块时就系统崩溃。
由于根分区是ufs,每次重启还得fsck。
请问有没有代价小一点的方法调试驱动?

另外请教一下,如下代码中,(long)强制转换有没有什么问题?
以前没有这个转换,移植过来编译时有警告,我查了一些资料后,就加了一个(long)。
我怀疑崩溃和这类转换有关,因为以前32位可以正常工作。

u_int32_t addr;
..........
for(i=1; i <= *((u_int8_t *)(long)(addr + 0x4)); i++)

类似的转换还有这个:
static u_int32_t smbios_eps = 0;
.........
u_int8_t major = *((u_int8_t *)(long)(smbios_eps + 0x6));

_________________
又要毕业了。应该是最后一次。
-------------
audio/mous
ports-mgmt/pkg-rmleaf
Buffer Hint: http://www.vim.org/scripts/script.php?script_id=5272
返回页首
阅览会员资料 发送站内信件
delphij
精神病


注册时间: 2002-08-07
文章: 10721
来自: San Jose, California

文章发表于: Wed 2011-01-26 02:26:53    发表主题: 引用并回复

准备崩溃之前 mount -u -o rdonly所有的UFS挂点即可。

我认为你的转换是不对的,因为addr是u_int32_t,但是指针是64位的。addr应该是一个64位的量,需要的信息在转换之前已经被干掉了……

_________________
BSD是独立的一蹴,我们有自己的圈子,我们不以商业驱动,追求完美是我们的源动力,任何不好的代码都不能在这里存活。

天下没有白费的努力。成功不必在我,而功力必不唐捐。
返回页首
阅览会员资料 发送站内信件 发送电子邮件 浏览发表者的主页
syh
老妖


注册时间: 2010-05-02
文章: 1617
来自: 卡拉赞

文章发表于: Wed 2011-01-26 03:33:58    发表主题: 引用并回复

多谢。
看来我还得彻底搞明白这个addr是什么作用。。。
目前参考的是man和arch book,要是能有一本"FreeBSD device driver"就好啦。

_________________
又要毕业了。应该是最后一次。
-------------
audio/mous
ports-mgmt/pkg-rmleaf
Buffer Hint: http://www.vim.org/scripts/script.php?script_id=5272
返回页首
阅览会员资料 发送站内信件
从以前的文章开始显示:   
发表新文章   回复文章    FreeBSD China -> 设备驱动 论坛时间为 北京时间
1页/共1

 
转跳到:  
不能发布新主题
不能在这个论坛回复主题
不能在这个论坛编辑自己的文章
不能在这个论坛删除自己的文章
不能在这个论坛发表投票


Powered by phpBB 2023cc © 2003 Opensource Steps; © 2003-2009 The FreeBSD Simplified Chinese Project
Powered by phpBB © 2001, 2005 phpBB Group
Protected by Project Honey Pot and phpBB.cc
silvery-trainer
The FreeBSD China Project 网站: 中文计划网站 社区网站
The FreeBSD China Project 版权所有 (C) 1999 - 2003 网页设计版权 著作权和商标