先抱歉一下,由于前几天比较忙,所以只列了个标题,没有实际写点儿东西,下面言归正传。
首先说一下项目背景,由于项目要求,我需要在Linux下编写一个CAN卡的驱动,并使用SocketCAN的接口,我选择的发行版是Fedora20,内核版本用的是3.17.3-200.fc20。通过yum安装了module,kernel-devel……反正是我觉得用得到的都装了,键入make xconfig修改模块添加CAN Bus subsystem support,我用的是研华的卡,所以要还要添加sja1000的模块,这个不详细说,相信你们都懂。然后退出敲入make modules,问题出现了,Linux出现如下提示:
没有规则创建syscall_32.tbl需要的目标syscall_32.h(大概是这么一个提示)
反正就是安装了所有的头文件,模块,内核工具及源码均不能解决该问题(低版本的时候从来没有这个问题),万般无奈之下去Fedora的Wiki看了一下,按照其中的方法创建了源码树才得以解决该问题,可以在本地编译模块。
我的目标不是建立一个可以安装的rpm包,而是让我当前发行版的内核可以正常编译我的驱动模块(我的机器确实不能只通过yum更新devel和module包来编译驱动模块)
按照wiki的手册(英文较新,中文比较容易懂)一直做到环境变量导出这一步
export arch=x86_64 # replace x86_64 with your arch export ver=3.7 # replace 3.1 with your kernel version export subver=4-204 export fedver=fc16 # replace fc16 with your fedora version
版本号自己改改。
然后从/boot下拷贝配置文件到rpmbuild/BUILD/kernel-3.17.fc20/linux-3.17.3-200.fc20.i686并命名为.config
输入make oldconfig
输入make xconfig
做些修改退出
接着make modules && make modules_install
接着make && make install
OK至此内核修理完成
再次编译自己的模块,没有出现syscalls_32.tbl找不到的提示,问题解决!
有描述不清的地方,或者瞎写的地方,欢迎拍砖