978215369 发表于 2014-09-25 14:11

64位系统上装32位应用程序和驱动通信

系统是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;        // /a
        __u8 dev_name;                // /dev/sda1
        __u8 log_path;                // /b
        __u8 dev_name_log;        // /dev/sda2
}__attribute__((__packed__));

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


环境为64位系统,编译的驱动程序如果和64位的应用程序通信,就没有此问题,请高人帮忙解答
页: [1]
查看完整版本: 64位系统上装32位应用程序和驱动通信