导航:首页 > 源码编译 > 内核编译卡住了怎么办

内核编译卡住了怎么办

发布时间:2022-10-02 17:35:55

A. linux编译内核出错,求助

Linux起来以后,Linux内核存在于内存和硬盘中。Linux内核编译是重新编译一个硬盘映像,不影响你现在的使用。重启以后,你可以选择这个新的映像,新内核就生效了。原来的内核可以保存在硬盘中,在硬盘中是可以有多个内核映像的,但是内存中只有一个,Linux内核一直在运行,是Linux系统的总管家。ARM开发板重新编译内核是因为嵌入式上资源有限,要去掉一些不必要的选项,编一个小一点的内核。还有ARM的汇编指令是针对ARM类型CPU的,PC上的汇编指令是针对x86类型CPU的,所以必须用针对ARM处理器的编译工具链去编译内核,在x86机器上(就是你的电脑)编译ARM内核,在一种CPU机器上编译另外一种CPU的代码,就叫做交叉编译。

B. linux内核编译一直出这个问题

没有用过kbuild这个命令
1. 你可以用 make试试,但不知道能不能适用你的系统。
清空已经编译临时文件

make clean
配置

make menuconfig

编译

make
安装编译好的模块

make moles_install
安装编译好的内核(根据你编译的版本而定)

cp ...
2. 或者你可以用genkernel这个工具编译,不过要先安装(不知道ubuntu的版本下是否能用,我是在gentoo下用过).

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

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

D. 我编译的Linux内核为什么会在启动时卡住不动

如果,你的CPU支持内核虚拟化那就直接用linux自带的xen就可以做虚拟机了不必装vmware!

E. 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 就可以看到 产生的内核信息啦

F. linux 在虚拟机中编译完内核后无法启动了怎么办~~~

不想修改grub的话可以先光盘启动,然后把光盘中/boot里面的内核文件和/lib/moles/**下的文件拷入硬盘对应的文件夹,替换你自己编译的内核~

G. ubuntu内核编译到一半退出

ubuntu内核编译到一半退出原因如下
主要是因为没有在内核源码目录下进行。例如,要编译或升级的内核解压后的目录为/usr/src/linux-2.4.24,一定要进入到该目录后使用make menuconfig命令,这样就不会提示错误了。
2、Unable to find the ncurses libraries
更新或编译Ubuntu的内核时,执行make menuconfig可能看如这样的错误:*** required header files.
*** ‘make menuconfig’ requires the ncurses libraries.
*** Install ncurses (ncurses-devel) and try again.
这是因为缺少库文件,使用apt-get install ncurses-dev在线安装即可。
3、Your display is too small to run Menuconfig这是因为屏幕太小的缘故,窗口调大即可。

H. 菜鸟求助,编译完内核进不了系统了

一种是在grub作内核引导时添加idle参数,这一种是国内网常见的一种说法;
第二个方法是注意一下bios中显示的CPU或者内存条的温度;
第三种是重新作initrd,即mkinitrd;
第四种是在grub中启动memtest86来测试内存。

I. 我编译的Linux内核为什么会在启动时卡住不动

如果,你的CPU支持内核虚拟化
那就直接用linux自带的xen就可以做虚拟机了
不必装vmware!

J. 我的Linux内核 编译一直过不去

这个....问题可能是多方面的 有可能是程度依赖问题 或者可能是你编译的方式不对

阅读全文

与内核编译卡住了怎么办相关的资料

热点内容
喷油螺杆制冷压缩机 浏览:578
python员工信息登记表 浏览:376
高中美术pdf 浏览:160
java实现排列 浏览:512
javavector的用法 浏览:981
osi实现加密的三层 浏览:231
大众宝来原厂中控如何安装app 浏览:915
linux内核根文件系统 浏览:242
3d的命令面板不见了 浏览:525
武汉理工大学服务器ip地址 浏览:148
亚马逊云服务器登录 浏览:524
安卓手机如何进行文件处理 浏览:70
mysql执行系统命令 浏览:929
php支持curlhttps 浏览:142
新预算法责任 浏览:443
服务器如何处理5万人同时在线 浏览:250
哈夫曼编码数据压缩 浏览:425
锁定服务器是什么意思 浏览:383
场景检测算法 浏览:616
解压手机软件触屏 浏览:349