编译Linux内核的错误汇总
编译内核遇到错误的办法

我要编译的版本号是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报错情况汇总

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编程中会出现的错误

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内核版本的差异导致的。
在linux下利用程序崩溃后的core文件分析bug(转载)

当我们的程序崩溃时,内核有可能把该程序当前内存映射到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内核移植过程中常见问题及解决方法

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!这个提示是内核启动加载驱动时出错,那就只有找到出错的驱动,不加载它,如果必须要用这个驱动,只有自己修改源代码,一般问题都在对硬件的地址操作有问题。
Linux系统编译安装常见错误处理方法

5.Configure: error: libjpeg.(a|so) not found
# yum install libjpeg libjpeg-devel
6.Configure: error: libpng.(also) not found.
# yum install libpng libpng-devel
13.Configure: error: Cannot find ldap.h
# yum install openldap-devel
本篇文章来源于 Linux公社网站() 原文链接:/Linux/2011-04/34622.htm
再php:~/:./configure …… --with-gd=/usr/local/gd2 ……
1) Configure: error: xml2-config not found. Please check your libxml2 installation.
Solutions :
Solutions :
Quote: # yum install unixODBC-devel
12) Configure: error: Cannot find pspell
Solutions :
Quote: # yum install pspell-devel
13) configure: error: mcrypt.h not found. Please reinstall libmcrypt.
7) Configure: error: freetype.h not found.
Solutions :
Quote: #yum install freetype-devel
Linux内核编译及常见错误实验报告

***学生实验报告一、实验目的(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内核模块编译出错: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⽂件中使⽤的变量,表⽰要编译成模块的⽬标⽂件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四: make zImage 和 make xipImage Kernel configured for XIP (CONFIG_XIP_KERNEL=y) Only the xipImage target is available in this case make[1]: *** [arch/arm/boot/zImage] Error 1 make: *** [zImage] Error 2
下面是编译时产生的一些信息
1' cross compile
# CROSS_COMPILE specify the prefix used for all executables used
# during compilation. Only gcc and related bin- utils executables
解决方法:修改 arch/arm/kernel/vmlinux.lds [arm@localhost linux2.6.14]$ vi arch/arm/kernel/vmlinux.lds 将文件尾 2 条的 ASSERT 注释掉(1439 行) /* ASSERT((__proc_info_end __ proc_info_begin), "missing CPU support") */ /* ASSERT((__arch_info_end __ arch_info_begin), "no machine record defined") */ 然后重新 make zImage 即可
b
/usr/local/arm/bin/arm- linux- ld:arch/arm/kernel/vmlinux.lds:782: parse error make: *** [.tmp_vmlinux1] 错误 1 ld 链接时产生错误 对应行:
/home/kevin/ARMSystem/linux-2.6.12/arch/arm/kernel/vmlinux.lds
make[1]: `include/asm-arm/mach-types.h' is up to date.
CHK include/linux/utsrelease.h
CC
arch/arm/kernel/asm-offsets.s
cc1: error: invalid option `abi=aapcs- linux' make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1
scripts/basic/docproc.c: 在函数‘singfunc’中: scripts/basic/docproc.c:274: 警告: 对指针赋值时目标与指针符号不一致 scripts/basic/docproc.c: 在函数‘parse_file’中: scripts/basic/docproc.c:296: 警告: 对指针赋值时目标与指针符号不一致
/* those must never be empty */
ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") 解决办法: 注释掉这两行
make: *** [prepare0] Error 2 解决方法:
You're building an EABI kernel with an OABI compiler. You can either turn off the
EABI option in your config file (Kernel Features->Use EABI),or, you can use an EABI toolchain such as the ARM/GNU Linux one from
# are prefixed with $(CROSS_COMPILE).
# CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64- linux-
# Alternatively CROSS_COMPILE can be set in the environment.
解决方法: 好象是 make menuconfig 的时候 Boot options--->Kernel Execte-In-Place from ROM 选项问题,去掉这个选项编译通过(如果是 make xopImage 时則需要将这个选项 选上),最终成功编译了 make zImage。 五: 出现 make:***[.tmp_vmlinux1] Error 1 这类错误
HOSTCC scripts/basic/split- include scripts/basic/split- include.c: 在函数‘main’中: scripts/basic/split- include.c:113: 警告: 对指针赋值时目标与指针符号不一致
HOSTCC scripts/basic/docproc scripts/basic/docproc.c: 在函数‘find_export_symbols’中: scripts/basic/docproc.c:184: 警告: 对指针赋值时目标与指针符号不一致 scripts/basic/docproc.c:185: 警告: 对指针赋值时目标与指针符号不一致 scripts/basic/docproc.c:202: 警告: 传递参数 2 (属于‘add_new_symbol’) 给指 针时,目标与指针符号不一致
2'
kevin@kevin-desktop:~/ARMSystem/linux-2.6.12$ make distclean
# distclean
#
.PHONY: distclean
distclean: mrproper @find $(srctree) $(RCS_FIND_IGNORE) \
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
六: 如果大家遇到一下几个问题可以参考本文:
a
make menuconfig
1) /usr/bin/ld: cannot find - lncurses
解决办法:
sudo apt-get install libncurses5-dev 2) Your display is too small to run Menuconfig! 解决办法: 窗口最大化
编译 linux 内核时出现的问题
一: invalid option `abi=aapcs-LINUX'选项错误
scripts/kconfig/conf -s arch/arm/Kconfig
CHK include/linux/version.h SYMLINK include/asm-arm/arch -> include/asm-arm/arch-s3c2410
drivers/built- in.o(.text+0x281e4):drivers/char/nvram.c:350: more undefined
references to `rtc_lock' follow 查找 drivers/char/nvram.c 有关的 rtc_lock 定义,发现 2.6.21 与以往的 kernel 不同, 于是在包含文件中查找,在 include/linux/mc146818rtc.h 中发现了 rtc_lock 的定义, 但是有一个__KERNEL__的条件编译选项,去掉这个条件编译选项,再 make zImage,但是问题好像依然存在,继续在 drivers/char/nvram.c 中增加这个定义 spinlock_t rtc_lock;再编译,发现编译通过。
SHIPPED scripts/kconfig/zconf.tab.h
HOSTCC scripts/kconfig/conf.o scripts/kconfig/conf.c: 在函数‘strip’中: scripts/kconfig/conf.c:46: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标与 指针符号不一致 scripts/kconfig/conf.c: 在函数‘conf_askvalue’中: scripts/kconfig/conf.c:94: 警告: 传递参数 1 (属于‘fgets’) 给指针时,目标与 指针符号不一致 scripts/kconfig/conf.c: 在函数‘conf_string’中: scripts/kconfig/conf.c:187: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标 与指针符号不一致 scripts/kconfig/conf.c:188: 警告: 对指针赋值时目标与指针符号不一致 scripts/kconfig/conf.c: 在函数‘conf_sym’中: scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标 与指针符号不一致 scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标 与指针符号不一致 scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:236: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标 与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘strlen’) 给指针时,目标 与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c:248: 警告: 传递参数 1 (属于‘__builtin_strcmp’) 给指针 时,目标与指针符号不一致 scripts/kconfig/conf.c: 在函数‘conf_choice’中: scripts/kconfig/conf.c:350: 警告: 传递参数 1 (属于‘fgets’) 给指针时,目标与 指针符号不一致