问题描述
解决方案
看相关变量的定义:
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来定义打印的变量。
时间: 2025-01-29 05:46:44