当前位置:首页 » 编程软件 » 内核编译成功后重启的常见问题

内核编译成功后重启的常见问题

发布时间: 2022-09-25 20:06:57

① 请问大神们Ubuntu虚拟机自己编译linux3.12.5内核后,配置从刚编译的内核启动是出现这问题。什么情况

初始化进程执行失败,计算机执行时,首先加电检查硬件,其实执行grub,为系统加载做准备,而后运行init进程,从上面可以看到“Failed to execute /init"说明初始化失败,你编译内核是存在问题的

② 编译内核模块常见有关问题怎么解决

第一次把自己编译的驱动模块加载进开发板,就出现问题,还好没花费多长时间,下面列举出现的问题及解决方案
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内核编译rboot重启后一直这样显示,关掉再打开还是这样求大神解救

基于x86的处理器有两种操作模式:实模式和保护模式。在实模式下,用户仅可以使用1 MB内存,并且没有任何保护。保护模式要复杂得多,用户可以使用更多的高级功能(如分页)。CPU 必须中途将实模式切换为保护模式。但是,这种切换是单向的,即不能从保护模式再切换回实模式。
内核初始化的第一步是执行实模式下的汇编代码,之后执行保护模式下init/main.c文件(上一章修改的源文件)中的 start_kernel()函数。
start_kernel()函数首先会初始化CPU子系统,之后让内存和进程管理系统就位,接下来启动外部总线和 I/O设备,最后一步是激活初始化(init)程序,它是所有Linux进程的父进程。初始化进程执行启动必要的内核服务的用户空间脚本,并且最终派生控制台终端程序以及显示登录(login)提示。

④ 对Ubuntu 8.04内核进行升级,新内核编译完成后重新启动,系统提示找不到文件

重启,从Ubuntu 8.04.2, kernel 2.6.24-16-generic进入系统
终端执行 sudo update-grub 自动升级grub
看能不能从新内核引导,如果不行就是你升级内核时出了问题,查看日志或重新编译

⑤ ubuntu重新编译内核安装之后,重启,出现了问题,求助!这该怎么解决

把原先的内核删除了吗?

⑥ linux内核启动出错,我编译内核,制作完ramdisk,修改完grub.conf,启动时出现以下错误,怎么回事

ramdisk 出错。
既然自己编译 linux 内核,不推荐使用randisk,只使用内核就行,
在编译内核时一定要将自己使用的文件系统编译进内核,引导时,内核后跟主分区的设备名就行,
ramdisk的作用就是加载内核驱动的,把文件系统驱动直接编译进内核,就不需要 ramdisk 了。

⑦ 虚拟机上编译linux内核,重启后,不能正常进入系统,显示出现这样的问题:

希望你用的boot loader旧的菜单项还在,这样的话你可以选那条boot起来然后重新编译;
你的问题感觉上file system没有编译进内核,所以没有办法mount分区;
或者你的boot loader的菜单项没配置好;

⑧ 重新编译内核后无法启动,该怎么处理

以前的内核还在吗,可能不是内核的问题,你能进入到grub选择系统的菜单吗,如果不能进入,那是引导的问题,如果能进去,尝试进入命令行模式引导你以前的旧内核
一般,我遇到这种情况都是显卡驱动的问题,安装了linux image后,还要安装相应的linux headers,系统启动后,按Crtl+Alt+Fn(n=2,3,4,5,6)如果能进入tty,那就是显示驱动没装上,故不能进入图形界面。但系统已经启动了。

⑨ linux内核编译完成后重启,出现mdio-gpio is already registered,怎么办

图片好小...
不过依稀看到了是加载一个内核模块(dm-region-hash)错误,这个模块应该是和文件系统相关的,然后后面mount 文件系统的时候就找不到磁盘...
你更新了的内核出了问题...加载模块的时候显示这个模块已经存在,所以就没法insmod这个模块,操作不成功了。大概是重复加载了...

然后给你搜索了下,这个问题好像比较常见,这里面有人给出了解决方案:

地址:
把有用的给你贴出来吧...

insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
这一句是说你把dm-region-hash编译进内核,却没有生成dm-region-hash.ko文件,可能是有些需要的项没选上,我也是遇到这种问题,一直没解决 [/quote]

是因为重复加载了/lib/dm-region-hash.ko

可以解决的,步骤如下
1,解压initrd文件
[root@bogon ~]# cp /boot/initrd-2.6.30.4.img /tmp
[root@bogon ~]# cd /tmp/
[root@bogon tmp]# ls
initrd-2.6.30.4.img
[root@bogon tmp]# mkdir newinitrd
[root@bogon tmp]# cd newinitrd/
[root@bogon newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i
11537 blocks
释放之后看到如下内容
[root@bogon newinitrd]# ls
bin dev etc init lib proc sbin sys sysroot

2,ok,下边就是编辑init,删掉其中重复的四行中的两行
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko

3,重新打包initrd
[root@bogon newinitrd]# find .|cpio -c -o > ../initrd
11538 blocks
[root@bogon newinitrd]# cd ..
[root@bogon tmp]# gzip -9 < initrd > initrd.img
[root@bogon tmp]# ls
initrd-2.6.30.4.img initrd initrd.img newinitrd

好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改grub.conf里边的initrd-2.6.30.4.img为initrd.img就可以了,
这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists” 就不会有了

其实将init文件的第二行“setquiet” 去掉,你就知道initrd文件到底在做什么了

⑩ 新编译了linux内核后,启动报错,该怎么解决

你编译什么了,
貌似是不识别文件系统了

热点内容
个人热点的密码怎么改 发布:2024-05-08 06:19:13 浏览:638
传递加密 发布:2024-05-08 06:19:02 浏览:681
c语言是啥意思啊 发布:2024-05-08 06:01:09 浏览:695
帝豪换压缩机 发布:2024-05-08 05:42:15 浏览:902
java文件时间 发布:2024-05-08 05:32:04 浏览:267
空气压强算法 发布:2024-05-08 05:29:47 浏览:294
c语言中double的范围 发布:2024-05-08 04:53:29 浏览:122
脏小豆服务器怎么加入 发布:2024-05-08 04:40:40 浏览:552
万立存储介质 发布:2024-05-08 04:33:02 浏览:637
ftppro特效复制方法 发布:2024-05-08 04:06:05 浏览:927