我最近安装了Ubuntu14.10(内核v3.16.0-23),我对Linux环境很陌生,并学习如何编译-安装-引导新内核映像。
我下载了内核3.17.2。编译并构建了相同的。遵循以下命令序列:
make menuconfig
make
make modules_install
make install
update-initramfs -c -k 3.17.2
update-grub
然后,在重新启动之后,我无法引导到新构建的内核。见下面的错误:
**early console in decompress_kernel
Decompressing Linux... Parsing ELF..
几天前,我开始学习操作系统的概念,我已经遇到了一些问题。主要是我对系统调用非常好奇。我了解到,每个操作系统都提供了自己的API (例如Windows for Windows API、Linux for libc等)。
我开始混淆的是包装器函数。例如,Linux有一个fork()包装器函数。这是否意味着此函数中的算法根据操作系统的系统调用表执行系统调用例程?我不明白它是什么意思,它是用C编写的,这是否意味着它使用的是C标准库?或者只是C编译器?另外,为什么C编译器会编译它的标准库,即使有不同种类的编译器,比如GCC,windows,C编译器等等?我很好奇的是,C标准库函数也会调用系统调用,对吧?
我对操作系统编程很感兴趣,我想白手起家写我自己的内核。我精通C语言,还懂一点汇编。我打算买一本Andrew tanenbaum的书:"Operating systems Design and implementation“,开始读这本书。每个人都告诉我,这只是浪费时间,如果我放弃写自己的内核的想法就好了。但我只是想知道一切是如何在幕后工作的,学习编写自己的内核只是为了教育目的,我没有任何幻想,我的操作系统将是巨大的和可用的。
除了购买A.T OS Design and Implementation之外,还有什么方法可以了解OS在幕后是如何工作的?是否足以构建我自己的linux发行版?学
我刚刚看到谷歌将goldfish_armv7_defconfig添加到3.18内核中,当我编译内核时,没有任何错误。但当我在模拟器中启动它时,我得到了一个黑屏,设备保持“脱机”状态!
编译:
$ make ARCH=arm goldfish_armv7_defconfig
$ make ARCH=arm CROSS_COMPILE=/opt/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- menuconfig # I enable overlayf