- 論壇徽章:
- 0
|
系統(tǒng)是64位,在此系統(tǒng)上編譯的驅(qū)動(dòng)程序和32位應(yīng)用程序通過(guò)netlink通信,sendto中的buf從應(yīng)用程序發(fā)送到內(nèi)核態(tài)驅(qū)動(dòng),發(fā)生了變化,
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之前和內(nèi)核sock收到之前,發(fā)生了很大變化,內(nèi)核收到的__u8 mount_point[DISK_DOS_NAME_LEN]和下面的dev_name, log_path, dev_name_log與真實(shí)的值相比少了前四個(gè)字符,major_no以及下面的minor,sec_size, bl_size傳的值接收到的都不對(duì)。
環(huán)境為64位系統(tǒng),編譯的驅(qū)動(dòng)程序如果和64位的應(yīng)用程序通信,就沒(méi)有此問(wèn)題,請(qǐng)高人幫忙解答
|
|