与SLES 12 SP2一起分发的新Linux内核4.4.2的更改导致驱动程序构建失败

时间:2017-06-12 10:09:31

标签: linux-kernel linux-device-driver suse sles

我正在使用内核版本为4.4.2的SLES 12 SP2上的3.x内核构建我的SLES 12驱动程序(块设备驱动程序)。现在我面临的问题很少:

  1.   

    struct bvec_merge_data

    在include / linux / blkdev.h

    中的内核4.3.0中不可用

    struct bvec_merge_data { struct block_device * bi_bdev;
    sector_t bi_sector;
    unsigned bi_size;
    unsigned long bi_rw; };

  2. 从4.2.8开始,此功能指针不存在。 4.3或更高版本中提供了可能的替代方法。

  3.   

    typedef int(merge_bvec_fn)(struct request_queue *,struct   bvec_merge_data *,                  struct bio_vec *);

    1. 在request_queue结构中,从4.2.8中删除了以下结构元素,其中处理了这些元素 struct request_queue {
    2.   

      unrep_rq_fn * unprep_rq_fn;

           

      merge_bvec_fn * merge_bvec_fn;

      我知道在哪里可以查找这些更改以及其他任何替代方案吗?

1 个答案:

答案 0 :(得分:1)

这些答案的最佳位置是内核源码的git日志。提供-S开关将在diff内容中搜索。提供-G将使用正则表达式。

在这种情况下,运行git log -S "bvec_merge_data"会显示与此结构相关的更改的信息,并通过关联显示merge_bvec_fn方法。这是关于完整删除结构bvec_merge_data的顶级消息的快照:

  

commit 8ae126660fddbeebb9251a174e6fa45b6ad8f932作者:Kent   Overstreet日期:星期一4月27日23:48:34   2015 -0700

block: kill merge_bvec_fn() completely

As generic_make_request() is now able to handle arbitrarily sized bios,
it's no longer necessary for each individual block driver to define its
own ->merge_bvec_fn() callback. Remove every invocation completely.

此前的其他提交消息显示了它的构建,这可能是对您的问题的一个很好的逐步解释。

希望有所帮助:)