免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2648 | 回复: 4
打印 上一主题 下一主题

linux 2.4 驱动移植到 2.6的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-09 15:35 |只看该作者 |倒序浏览
下文是一个串口驱动,我把它从2.4内核移植到2.6内核,只列出了几行代码,请大家帮我看看对不对,谢谢。

(一) linux 2.4的旧代码
void irq_handler(int irq,void *dev_id,struct pt_regs *regs)
{
static unsigned char serial_in_byte;
static unsigned outbuf_has_data;
static struct tq_struct task = {
{ NULL },
0 ,
serial_char_buffer_in,
&serial_in_byte,
};

unsigned int intID_reg, intID;

intID_reg = inb_p(combase+2); /* read interrupt ID register */
intID = intID_reg & 0x0f;
switch (intID) {
case 0x00: /* modem status changed */
modem_status = inb_p(combase+6); /* read MSR */
break;

case 0x01: /* no interrupt active */
break;

(二) linux 2.6 的改动
// 1. 2.6的内核中断处理函数是有类型的
irqreturn_t irq_handler(int irq,void *dev_id,struct pt_regs *regs)
{
static unsigned char serial_in_byte;
static unsigned outbuf_has_data;

// 2. 2.6内核的任务队列声明和使用都发生了变化
static DECLARE_WORK(task, serial_char_buffer_in);

unsigned int intID_reg, intID;

intID_reg = inb_p(combase+2); /* read interrupt ID register */
intID = intID_reg & 0x0f;
switch (intID) {
case 0x00: /* modem status changed */
modem_status = inb_p(combase+6); /* read MSR */
break;

case 0x01: /* no interrupt active */
break;

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-03-09 16:03 |只看该作者

回复 #1 tassard 的帖子

这个很难看出对不对,我跟你说主要的方法吧:
1、准备你要移植的这两个内核版本的源码;
2、对照其API,然后修改;编译,出错后在修改。思想正确就ok

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2009-03-09 23:05 |只看该作者
原帖由 dreamice 于 2009-3-9 16:03 发表
这个很难看出对不对,我跟你说主要的方法吧:
1、准备你要移植的这两个内核版本的源码;
2、对照其API,然后修改;编译,出错后在修改。思想正确就ok


恩。2.4和2.6很多同样功能的API都做了不小的调整。LZ就是需要对照你2.4中调用的API,找到2.6中对应的,然后看如何修改。

论坛徽章:
0
4 [报告]
发表于 2009-03-10 00:09 |只看该作者
编译不过就找原因贝,能编译过就算移植完了,然后再测测功能

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2009-03-10 09:06 |只看该作者
原帖由 emmoblin 于 2009-3-10 00:09 发表
编译不过就找原因贝,能编译过就算移植完了,然后再测测功能


编译过了未必就能跑得起来,通常会有unresolved symbol这样的错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP