免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1441 | 回复: 0

64位系统上装32位应用程序和驱动通信 [复制链接]

论坛徽章:
0
发表于 2014-09-25 14:11 |显示全部楼层
系统是64位,在此系统上编译的驱动程序和32位应用程序通过netlink通信,sendto中的buf从应用程序发送到内核态驱动,发生了变化,

struct sockaddr_nl peer;
struct io_filter_init_request *init_request = NULL;
给init_request赋值
sendto(_sockfd, init_request, init_request->hdr.nlmsg_len, 0, (struct sockaddr*)&peer, sizeof(peer)

struct io_filter_init_request {
        struct nlmsghdr hdr;
        __u32        item_cnt;                                                //elements contained in init_info
        struct io_filter_src_limit src_limit;
        struct io_filter_init_info init_info[];
};

struct io_filter_init_info {
        __u16 major_no;                                                        // major device number
          __u16 minor_no;                                                        // minor device number
        __u32 sec_size;                                                        // sector size
        __u32 bl_size;                                                        // block size
        __u8 mount_point[DISK_DOS_NAME_LEN];        // /a
        __u8 dev_name[DISK_DOS_NAME_LEN];                // /dev/sda1
        __u8 log_path[DISK_DOS_NAME_LEN];                // /b
        __u8 dev_name_log[DISK_DOS_NAME_LEN];        // /dev/sda2
}__attribute__((__packed__));

init_request赋值后, sendto之前和内核sock收到之前,发生了很大变化,内核收到的__u8 mount_point[DISK_DOS_NAME_LEN]和下面的dev_name, log_path, dev_name_log与真实的值相比少了前四个字符,major_no以及下面的minor,sec_size, bl_size传的值接收到的都不对。


环境为64位系统,编译的驱动程序如果和64位的应用程序通信,就没有此问题,请高人帮忙解答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP