- 论坛徽章:
- 0
|
系统是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位的应用程序通信,就没有此问题,请高人帮忙解答
|
|