导航:首页 > 源码编译 > 内核编译驱动没更新

内核编译驱动没更新

发布时间:2022-10-04 04:50:54

linux内核编译加入驱动

1、内核编译前期make menu时有固定的硬件支持列表,你选定就行了
2、如果你的网卡驱动支持加到内核源码,你就能在make menu是选定你的网卡驱动
3、读一下网卡驱动源码的INSTALL或README文档,肯定有安装步骤
4、一般网卡驱动编译后,可以用insmod安装使用

⑵ linux 编译内核几个常见问题解决方法

第一次把自己编译的驱动模块加载进开发板,就出现问题,还好没花费多长时间,下面列举出现的问题及解决方案
1:出现insmod: error inserting 'hello.ko': -1 Invalid mole format
法一(网上的):是因为内核模块生成的环境与运行的环境不一致,用linux-2.6.27内核源代码生成的模块,可能就不能在linux-2.6.32.2内核的linux环境下加载,需要在linux-2.6.27内核的linux环境下加载。
a.执行 uname -r //查看内核版本
b.一般出错信息被记录在文件/var/log/messages中,执行下面命令看错误信息
# cat /var/log/messages |tail
若出现类似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic '2.6.35.6-45.fc14.i686.PAE
' should be '2.6.35.13-92.fc14.i686.PAE'
则把 Makefile里的KDIR :=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1 改为
KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己内核源码路径
(这里的build1是一个文件链接,链接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然并卵,我的fedora 14 /usr/src/kernels下并没有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,虽然不知道两者有什么区别,但改成2.6.35.13-92.fc14.i686还是不行,照样这个问题,还好后来在看教学视频的到启发
法二:改的还是那个位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.2 //把这里改成你编译生成kernel的那个路径
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) moles ARCH=arm CROSS_COMPILE=arm-linux- //加这句
2. [70685.298483] hello: mole license 'unspecified' taints kernel.
[70685.298673] Disabling lock debugging e to kernel taint
方法:在模块程序中加入: MODULE_LICENSE("GPL");
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 错误解决
方法:lsmod 可查看模块信息
即无法删除对应的模块。
就是必须在/lib/moles下建立错误提示的对应的目录((2.6.32.2)即可。
必须创建/lib/moles/2.6.32.2这样一个空目录,否则不能卸载ko模块.
# rmmod nls_cp936
rmmod: chdir(/lib/moles): No such file or directory
但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:
rmmod: mole 'nls_cp936' not found
初步发现,原来这是编译kernel时使用make moles_install生成的一个目录,
但是经测试得知,rmmod: mole 'nls_cp936' not found来自于busybox,并不是来自kernel
1).创建/lib/moles/2.6.32.2空目录
2).使用如下源码生成rmmod命令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = delete_mole(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_mole
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf("Unable to unload driver mole \"%s\": %s\n",
modname, strerror(errno));
}
3).把生成的命令复制到文件系统
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
代码如下:
proc.c
[html] view plain
<span style="font-size:18px;">#include <linux/mole.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
#define procfs_name "proctest"

MODULE_LICENSE("GPL");
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{ int ret;
ret = sprintf(buffer, "HelloWorld!\n");
return ret;
}

int proc_init()
{ Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",procfs_name);
return -ENOMEM; }
Our_Proc_File->read_proc = procfile_read;//
// Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk("/proc/%s created\n", procfs_name);
return 0;
}
void proc_exit()
{ remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
}
mole_init(proc_init);
mole_exit(proc_exit);</span></span></span></span></span>
[html] view plain
<span style="font-size:18px;">

ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif</span></span></span></span></span>
make后生成proc.ko,再在开发板上insmod proc.ko即可
执行 dmesg 就可以看到 产生的内核信息啦

⑶ 为什么linux更新内核 显卡驱动失效

内核没有识别这个显卡的能力,所以需要安装这个显卡配套的驱动

⑷ linux内核编译问题

根据你的警告是提示,找不到这些驱动模块,应该是没有编译驱动模块或者没有安装驱动模块造成的。
1、要确保你的内核包是完整的,而且是centos配套版本(因为各大发行版都会针对自己的情况对内核进行配置和改动,直接用kernel.org的原版内核可能会有些故障)
2、编译前要 先make clean一下,把以前编译剩下的东西清掉,重头再来。

3、编译时顺序执行如下命令
make bzImage 生成内核映像
make moles 生成驱动模块
make moles_install 安装驱动模块
make install 安装内核

⑸ 为什么要配置内核为何要重新编译内核

为什么要配置内核?
编译前当然要配置一下内核啊,make menuconfig ,生成默认配置文件 .config ,这个文件是设置 cpu 体系,及很多驱动选项的,你没配置这个,怎么可能编译那
新下载的内核都是没有默认 .config 需要你找到一个默认的config 文件,比如 arch/arm/configs/ 下是 arm cpu 很多的默认配置,当然你也可以把你以前的 config 文件拷贝到新内核目录下。
.config 是配置编译内核的最初步骤,你要编译驱动程序,就必须要了解这个,多上网查下资料
然后重新编译

为何要重新编译内核?
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。

新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译Linux内核。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:
(1)自己定制编译的内核运行更快(具有更少的代码)
(2)系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
(3)不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
(4) 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些

这样就了解为什么要编译Linux内核了。

⑹ linux里面编译安装显卡驱动失败求高手帮助

源码包的位置不正确,你可以在./config 的时候指定内核源码包位置。一般linux将内核源码装在了/usr/src/linux下,如果你所用的内核版本与源码包的版本不一致,则你要更新源码包,并重新生成生成version.h文件:

makeinclude/linux/version.h
makeinclude/asm
ls-l/lib/moles/3.x.x.x

其中3.x.x.x是你的源码包内核版本号。


然后,你再编译一次驱动,应该就能编译成功了。

⑺ 为什么内核配置成功,驱动编译不成功

因为驱动可能是为特定的内核编写的。可能需要稍加改动

⑻ linux内核剪裁后,之前的驱动程序还在吗此时是否需要重新编译各种驱动程序

驱动有很多种,有些是强制必须编译在内核里的,有些是可选编译在内核里的,有些不是内核自带的,第一种内核没剪裁掉那些驱动就在内核里了,第二种如果你内核剪裁了(或者选择成编译成动态加载)就没有,要另外编译一下,如果没剪裁(直接编译进内核)不存在重新编译,最后一种,也不用重编译,除非内版本号与原驱动编译时用的版本号不兼容了

⑼ 编译内核后kernel panic,应该是sata驱动没有加载上,如何给kernel加驱动

.... 你太牛x了

第一 内核和 initrd文件是统一的 ,也就是说 你编译了一个内核 如果使用initrd的话 必须是你编译的内核生成的initrd ,不过这个不是必须存在的, 不过你这里必须吧 Initrd /initrd-2.4.20-8.img 这一行删除

第二, hdc=ide-scsi 这个你为什么要加载? 让系统自动处理最好, 此外 vmware下面 如果使用scsi硬盘, 那么默认的磁盘应该是 sda , 光驱一般是 hdc

还有, 内核里面的选项有3个 , Y的意思是编译进内核 也就是你这里的bzImage-2.4.18test1 文件, N是不编译, M是编译为模块,如果你的 SCSI驱动编译为模块的话 那才需要 initrd ,否则就不需要

另外 ,我想你似乎搞错了 scsi low-level drivers 这个不是很重要好像 都编译为模块即可 重要的是上面的几个scsi支持 ,这里不方便赘述,给你找个参考资料 , 你那本书太老了实在

这里有个很好的内核选项介绍

事实上, 不需要在内核编译上耗费太多的时间,选项没必要太精细面面俱到,基本上 ,基础的东西和文件系统驱动都编译进内核,其他的都编译为模块即可,系统会自动加载需要的 , 除非你要做深入的内核驱动程序分析 ..

⑽ linux 内核驱动问题

1,重新编译内核浪费时间,可以考虑把fedora的it20驱动移植过来!参考网上的makefile写个,自己编译一下。把编译得到的ko放到某目录下, 在启动脚本里加载它!

2, 如果想重新编译内核也可以,把fedora9的it驱动替换你的驱动(把源文件名字改成一样的),前提是你有内核源代码!一般安装完fedora后,在源码里有个.config文件,这就是默认的配置文件,你也不许要再make menuconfig了,直接make oldconfig make 就行。

阅读全文

与内核编译驱动没更新相关的资料

热点内容
程序员直播机器人舞团 浏览:767
devc指针编译问题 浏览:998
支持dsd硬解压声卡 浏览:769
怎么查看u盘加密区 浏览:182
台电加密是什么格式 浏览:155
php论坛版块在哪个文件夹 浏览:442
暗黑的服务器为什么维护 浏览:624
android内存溢出的原因 浏览:18
标志307的压缩比是多少 浏览:636
服务器启动为什么叫三声 浏览:997
追风筝的人英文pdf 浏览:940
解压小熊手机壳 浏览:347
成都市区建成面积算法 浏览:662
智能家居单片机 浏览:98
买男装用什么app好 浏览:856
文件夹合并了怎么拆开 浏览:262
波段副图源码无未来函数 浏览:91
livecn服务器地址 浏览:259
程序员这个工作真的很吃香吗 浏览:848
程序员和数学分析师待遇 浏览:681