编译Linux内核的错误汇总
- 格式:pdf
- 大小:183.46 KB
- 文档页数:12
我要编译的版本号是2.6.28.7只修改了Makefile里的ARCH 和CROSS1.ERROR:"__bad_udelay"[sound/pci/ali5451/snd-ali5451.ko]2.3.ERROR:"__bad_udelay"[drivers/video/savage/savagefb.ko]4.5.ERROR:"__bad_udelay"[drivers/scsi/atp870u.ko]6.7.ERROR:"__bad_udelay"[drivers/net/sungem.ko]8.9.ERROR:"__bad_udelay"[drivers/atm/he.ko]10.11.make[1]:***[__modpost]错误 112.13.make:***[modules]错误 2解决问题首先要确定问题,然后整理思路。
想一想,这些都是一些不认识的驱动啊,我们很可能不需要这些驱动的。
那么我们就去掉它们好了。
它们从哪里来?肯定是配置项选中了,也许是默认的吧。
那么我们可以去make menuconfig来把他们去掉,但不熟悉的朋友肯定会很烦那堆配置菜单。
如果知道menuconfig的原理,我们可以知道各个子目录下的Makefile正是构成配置菜单的东西。
我们也可以找这些来改。
首先在内核源码根目录下用配置菜单搜索make menuconfigdevice drivers -->network device support-->enthernet (10 or 100Mbit)-->Sun GEM support选项去掉。
可以解决sungem.ko的错误。
其余用命令搜索find -name "Makefile"|xargs grep "xxx"xxx为上面报错的驱动模块名称,注意,不要搜snd-ali5451.ko,而是搜snd-ali5451.o其实,出现这个问题,很多时候是我们没有先用一个默认配置,如:make smdk2410_config ,导致默认的配置菜单有些配置和实际源码有差别。
Linux报错汇总1. 命令输入错误,shell无法正确解释错误解释为:命令未被发现2. 命令正确,但是没有键入参数错误解释为:丢失文件操作数(参数)3. 命令正确,但是选项错误错误解释为:无效的选项,如果加入选项的话,可以选择-L和-P4. 定义变量值,但是调用变量的方式不正确,系统认为是命令而无法执行错误解释为:命令未被发现5. 创建文件或目录的时候,如果创建的文件名和现有文件相同,则无法执行错误解释为:不能创建目录‘wnt’:文件已存在6. 删除文件的时候得保证该文件的名称正确,否则无法执行错误解释为:没有这样的文件或目录7. 对磁盘进行分区的时候,如果设备文件名称错误,则无法执行错误解释为:无法打开/dev/sdb8. 未在文件系统中设置磁盘配额的支持就做磁盘配额错误解释为:没有用来进行配额检测的文件系统9. 创建物理卷的磁盘分区没有创建错误解释为:设备/dev/sdb1没有被发现(或者被滤除而忽略)10. 创建卷组的时候没有指定卷组的名称错误解释为:/dev/sdb1:已经存在了文件系统,新卷组名称“sdb1”无效11. 指定卷组PE的时候出现错误错误解释为:广度范围必须是2的幂,设定明确的卷组设置格式‘wnt’失败12. 从卷组中删除物理卷的时候出错错误解释为:物理卷“/dev/sdb3”未在卷组“wnt”中发现13. 扩展卷组的时候出错错误解释为:/dev/sdb5未被定义为一个存在的物理卷,无法将物理卷‘/dev/sdb5’加入卷组‘wnt’中14. 查看网卡配置信息的时候指定的网卡设备名称不正确错误解释为:eth1:错误的引用了接口信息:设备未被发现15. 创建用户的时候如果用户已经存在,无法实现用户的添加错误解释为:useradd:用户a已经存在(如果是组的话也是这样的报错)16. Apache中虚拟主机错误错误解释为:配置文件/etc/httpd/conf/httpd.conf第984行的索引错误,<VirtualHost>没有关闭17. 如果对于目录没有执行权限,则会有下列错误错误解释为:权限不够18. 删除组的时候,如果该组还是其他用户的主要组,则不允许删除该组错误解释为:不能移除用户的主要组19. 普通用户修改其他用户密码的时候无法执行,会出现下列错误错误解释为:passwd:只有root用户可以指定一个用户名20. 安装软件包的时候和卸载软件包的时候需要注意依存关系错误解释为:失败的依存关系,还没有安装bind-9.3.3-7.el5,这是被caching-nameserver-9.3.-7.el5.i386这个软件需要的软件包错误解释为:失败的依存关系,还没有卸载caching-nameserver-9.3.3-7.el5.i386,这个软件还需要依靠的软件包bind-9.3.3-7.el5而存在21. 卸载软件包的时候,应该输入软件名,而不应该带有版本号和平台号错误解释为:错误:软件包caching-nameserver-9.3.3-7.el5.i386.rpm没有被安装22.。
linux编程中会出现的错误1、错误提示1.ERROR: Kernel configuration is invalid.2. include/linux/autoconf.h or include/config/auto.conf aremissing.3. Run 'make oldconfig && make prepare' on kernel src to fix it.解决方法在自己的linux内核目录下运行make oldconfig && make prepare2、错误提示挂载时会报错“permission denied“解决方法这一步“服务器端在文件/etc/exports中设定允许被访问的文件、目录以及访问的权限”修改/etc/exports 文件,添加如下内容/opt/nfs *(rw,sync,no_root_squash,no_all_squash)(不同的人可能挂在的目录不同)运行以下命令启动nfs 服务:Host #/usr/sbin/exportfs –aHost #/sbin/service nfs restart3、错误提示mach/regs-gpio.h 找不到这个文件解决方法利用make menuconfig将内核CPU版本配成S3C2410,然后make config 最后make zImage,在编译就不会有问题了。
(得出结论:要编译2410的模块驱动文件,内核源码目录必须跟其一致,也配成2410的编译源码,要是配成6410则不行。
当然编译6410的模块文件,则必须将源码目录配成6410。
)4、错误提示led_driver: version magic '2.6.30.4 mod_unload modversions ARMv4 ' should be '2.6.30.4-GTStudio mod_unload ARMv4 ' insmod: cannot insert 'led_driver.ko': invalid module format 解决方法是由于编译器的版本不同和make menuconfig 配置时,在配置单中添加如下信息General setup --->Prompt for development and/or incomplete code/drivers(-EmbedSky(填上自己的模块名称)) Local version - append to kernel release内核版本的差异导致的。
当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。
最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。
也是最难查出问题原因的一个错误。
下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。
何谓core文件当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。
core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。
当程序接收到以下UNIX信号会产生core文件:在系统默认动作列,“终止w/core”表示在进程当前工作目录的core文件中复制了该进程的存储图像(该文件名为core,由此可以看出这种功能很久之前就是UNIX功能的一部分)。
大多数UNIX 调试程序都使用core文件以检查进程在终止时的状态。
core文件的产生不是POSIX.1所属部分,而是很多UNIX版本的实现特征。
UNIX第6版没有检查条件(a)和(b),并且其源代码中包含如下说明:“如果你正在找寻保护信号,那么当设置-用户-ID命令执行时,将可能产生大量的这种信号”。
4.3 + BSD产生名为core.prog的文件,其中prog是被执行的程序名的前1 6个字符。
它对core文件给予了某种标识,所以是一种改进特征。
表中“硬件故障”对应于实现定义的硬件故障。
这些名字中有很多取自UNIX早先在DP-11上的实现。
请查看你所使用的系统的手册,以确切地确定这些信号对应于哪些错误类型。
下面比较详细地说明这些信号。
? SIGABRT 调用abort函数时产生此信号。
进程异常终止。
? SIGBUS 指示一个实现定义的硬件故障。
? SIGEMT 指示一个实现定义的硬件故障。
EMT这一名字来自PDP-11的emulator trap 指令。
? SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。
? SIGILL 此信号指示进程已执行一条非法硬件指令。
LINUX-2.6内核移植过程中常见问题及解决方法1、内核启动后,出现如下提示后停住UNCOMPRESSING LINUX........................................................... DONE, BOOTING THE KERNEL一般情况下,这个时候内核已经启动了,只不过在控制台CONSOLE中没有打印信息而已。
所以问题主要锁定在串口这一块。
首先确定你的板子包括硬件都是没有问题的。
可以分以下几种情况,最常见的原因是在内核启动命令行这块CMDLINE,一般情况下LINUX-2.4内核中,CONSOLE=TTYS0,而LINUX-2.6内核则用CONSOLE=TTYSAC0。
还有一个原因,不多见,我当时用的是S3C2410的板子,BOOTLOADER用的是U-BOOT-1.0.0,内核移植的是LINUX-2.6.16,结果出现这个问题,在网上查了很多资料,最后找出来问题。
U-BOOT把S3C2410的时钟设置为202MHZ,而内核启动时使用的是200MHZ,修改U-BOOT中的MPLLCON:CLK_POWER->MPLLCON MPLLCON = 0X0005C040;//MPLL=200MHZ2、内核编译成功后,启动后出现如下提示后就停住了。
FREEING INIT MEMORY: 72KWARNING: UNABLE TO OPEN AN INITIAL CONSOLE.这个也是控制台CONSOLE的问题,LINUX-2.6.13以后的内核都支持DEVFS,而之后版本的内核就把DEVFS这块去掉了,虽然还能在内核源码中找到对应的源码,你也可以把它加进内核,但是也不是太好用。
2.6.13 后的版本改为支持UDEV了,UDEV这块我也没太弄懂,正在研究。
因此如果你是LINUX-2.6.13版本一下的内核,编译的时候在PSEUDO FILESYSTEMS添加DEV FILESYSTEM SURPPORT选项,也就是添加DEVFS的支持,如果LINUX-2.6.13之后的版本,你就看看你的ROOTFS下有没有/DEV/CONSOLE这个文件,没有的话,自己做一个就可以#MKNOD CONSOLE C 5 13、内核启动后,打印出一大堆提示信息UNABLE TO HANDLE KERNEL XXXX POINTER DEREFERENCE AT VIRTUAL ADDRESS XXXXXX ……R10: 00000000 R9 : 00000000 R8 : 00500001R7 : 00000001 R6 : C011AB50 R5 : C3726C00 R4 : C013E024R3 : 00000000 R2 : 00000000 R1 : 00000000 R0 : C3726C00….<0>KERNEL PANIC - NOT SYNCING: ATTEMPTED TO KILL INIT!这个提示是内核启动加载驱动时出错,那就只有找到出错的驱动,不加载它,如果必须要用这个驱动,只有自己修改源代码,一般问题都在对硬件的地址操作有问题。
***学生实验报告一、实验目的(1)学习重新编译Linux内核的方法(2)理解Linux标准内核和发行版本内核的区别。
二、实验内容在Linux系统中下载同一发行版本的版本号较高的内核,编译之后运行自己编译的内核,并使用uname-r命令查看是否运行成功。
由于不同版本的内核在编译过程中可能出现不同的问题,本书推荐的内核版本为4.16.10。
从第7章开始的进阶实验篇,都可以选用该版本的内核。
三、实验设备Vmware上运行的linux ubuntu 5.11.0-43-generic实验成功:linux ubuntu 4.18.0-generic(Ubuntu18.04均可)实验成功的方法在最后四、实验过程和原理分析一、实验(一)准备工作:在这里我建议用一个全新的虚拟机,避免编译错误对原来常使用的虚拟机造成不可逆的影响,安装好后就先安装gcc、make等工具首先下载好Linux***内核文件解压至/usr/src 目录下,如下:确认安装好gcc、make等工具,后可直接运行命令sudo make menuconfig进行查看内核功能是否需要编译,如果遇到如下错误可以运行命令sudo apt bison 或sudo apt-get install fiex bison命令解决错误:解决:(不建议)(强烈建议)除此之外还可以直接运行,上一条命令解决不了就用下面这个:sudo apt-get install --reinstall bison libbison-dev flex libfl-dev解决上述错误(强烈建议)运行完上述命令后再次输入sudo make menuconfig便正常进入如下:见到这个界面后无需任何多余操作,使用键盘方向键选择<Save>回车再回车即可此时.config文件生成成功.config文件是隐藏文件记得加参数-a此外还有一个方法就是用cp 命令从原有系统的内核复制.config文件过来也可以命令:sudo cp /boot/config- 5.11.0-43-generic ./.config(二)编译内核为了避免多线程编译时同时出现过多错误,我们这里一开始只使用单线程编译在这里除了用make编译还可以用make-kpkg等工具,个人比较喜欢用make-kpkg但课本用make所以我接下来的实验也先用make完成。
Linux内核模块编译出错:ER...嵌⼊式Linux简单内核模块的编程:将以下hello.c和Makefile⽂件放在同⼀⽬录,然后make⼀下⽣成hello.ko⽂件hello.c的内容:#include "linux/module.h"#include "linux/init.h"static int __init hellomodule_init(void) //模块初始化函数{printk("Hello_init! Are you ok ? oLHHo \n");return 0;}static void __exit hellomodule_exit(void) //模块退出函数{printk("Hello_exit! Oh_Yes!");return 0;}module_init(hellomodule_init);module_exit(hellomodule_exit);MODULE_LICENSE("GPL");⼀个简单的内核模块主要由4个部分组成:包含头⽂件、实现内核模块初始化函数和模块退出函数、使⽤module_init 和module_exit 宏指定模块初始化函数和模块退出函数、声明模块license为"GPL",这4个部分是⼀个模块必需的,也就构成了内核模块的框架。
Makefile的内容:ifneq ($(KERNELRELEASE),)obj-m := hello.oelseKDIR :=/home/olhho/opt/linux-2.6.30.9 #⾃⼰编译的内核的存放路径all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*endifobj-m:为内核顶层⽬录Makefile⽂件中使⽤的变量,表⽰要编译成模块的⽬标⽂件。
linux系统下uboot、kernel、android文件系统编译错误整理及解决办法Ver1.0作成者:雷鹏作成年月:2012/09/251、linux下编译应用程序时出现如下错误: /usr/bin/ld: cannot find -lxxx。
原因分析:编译过程找不到对应库文件。
其中,-lxxx表示链接库文件 libxxx.so。
由于库文件是编译过程临时生成的,如果前面编译过程出错也会导致出现这种情况,下面针对本机系统环境缺失而引起的错误进行分析。
一般出现这种错误有以下几种原因:⑴.系统缺乏对应的库文件;⑵.版本不对应;⑶.库文件的链接错误;⑷.库文件路径设置问题。
解决方法:对应第一第二种情况,可以通过下载安装lib来解决,ubuntu系统可以直接通过apt-get来安装:apt-get install libxxx-dev如果还是不能解决问题,那么,引起错误的原因不是链接错误就是库文件路径问题。
通过find或者locate指令定位到链接文件,查看链接文件是否正确的指向了编译需要的lib,如果不是,用下列指令修改它。
ln -sf */libxxx.so.x */libxxx.so如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存。
2、编译时出现错误提示:include/asm is a directory but a symlink was expected原因分析:linux/include/asm 文件夹是内核编译过程中创建的,创建结果就是一个指向文件夹asm-arm 的链接,表明该系统的平台是arm架构的,而编译系统内核之前,是没有asm这个链接的,所以,在编译过程中,创建该链接时文件名字与asm文件夹的名字发生冲突,于是系统报错了。
1.编译内核模块遇到的问题问题:使⽤内核包编译驱动时常常提⽰如下:WARNING: Symbol version dump /usr/src/linux-2.6.26/Module.symversis missing; modules will have no dependencies and modversions.原因:通常头核⼼包中是没有Module.symvers这个⽂件的,要想获取这个⽂件只能到下载相同版本核⼼(2.6.26-1-686)的头⽂件,是下载不是apt-get install ,只有下载的头⽂件中才有这个Module.symvers。
把Module.symvers 复制到核⼼包中,然后执⾏如下步骤:make oldconfig && make prepare && make scripts。
然后重新编译驱动,将解决这个warning,同时也解决了版本不正确的问题我不知道有多少⼈会碰上这样的问题,反正google中我发现没有⼈能说明⽩这个问题ps:我遇到的问题是则是运⾏:make -C /usr/src/linux-2.6.34-12 SUBDIRS=$PWD modules出错如下:make: Entering directory `/usr/src/linux-2.6.34-12'ERROR: Kernel configuration is invalid.include/generated/autoconf.h or include/config/auto.conf are missing.Run 'make oldconfig && make prepare' on kernel src to fix it.WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.scripts/Makefile.build:44: /usr/src/linux-2.6.34-12/PWD/Makefile: No such file or directorymake[1]: *** No rule to make target `/usr/src/linux-2.6.34-12/PWD/Makefile'. Stop.make: *** [_module_PWD] Error 2make: Leaving directory `/usr/src/linux-2.6.34-12'运⾏:make oldconfig && make prepare再次出错如下:make: Entering directory `/usr/src/linux-2.6.34-12'WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.CC [M] /home/xxx/test/dr/drhello.oBuilding modules, stage 2.MODPOST 1 modules/bin/sh: scripts/mod/modpost: No such file or directorymake[1]: *** [__modpost] Error 127make: *** [modules] Error 2make: Leaving directory `/usr/src/linux-2.6.34-12'加上:make scripts可以了make: Entering directory `/usr/src/linux-2.6.34-12'WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.CC [M] /home/xxx/test/dr/drhello.oBuilding modules, stage 2.MODPOST 1 modulesCC /home/test/dr/drhello.mod.oLD [M] /home/test/dr/drhello.komake: Leaving directory `/usr/src/linux-2.6.34-12'。