单挑王子 2015-01-07 09:10 采纳率: 0%
浏览 1508

内核调试,加法后打印不正常

图片说明
图片说明
图片说明
我在调试MTD驱动的时候,想不明白这打印怎么回事。

  • 写回答

1条回答

  • 曹大夯 2015-01-08 03:33
    关注

    看相关变量的定义:
    loff_t:
    typedef __kernel_loff_t loof_t
    typedef long long __kernel_loff_t
    mtd_part.offset类型为uint64_t
    其真正类型为unsigned long (32bit CPU)或者unsigned long long (64bit CPU)

    你的代码里面有两点需要注意:
    1. part->offset + from,涉及到不同类型的数据相加,不同情况下,编译器可能会做不同的处理。
    2. printk中,你的变量定义符用的是0x%x,对应的变量是int/unsigned int,打印long/long long类型数据的时候,也会涉及到类型转换导致数据丢失。

    建议修改代码,可以考虑将所有的数据类型都转换成long long 或者unsigned long long进行地址运算。同时在printk中使用0x%llx来定义打印的变量。

    评论

报告相同问题?