技术解析

如何从 Linux kernel source 安装原版(不属于任何发行版)的 Linux ?
0
2021-07-06 03:29:44
idczone

Linux kernel source tree 在 Github 的镜像地址
https://github.com/torvalds/linux

以 Release v4.3 为例

作为 Linux 的初学者不知道这样会有那些问题?


你還需要 shell XD

初学者比较好的还是选择一个发行版, Ubuntu 、 Fedora 、 CentOS 都行,个人比较建议 Ubuntu ,对初学者比较友好一些,外观上看也还行(个人看法),安装工具也挺方便。熟悉了之后再慢慢的接触其他发行版, CentOS 啊什么的

Linux from Scratch
你可以先阅读一番 别上手 再回来考虑这个问题

http://www.linuxfromscratch.org/lfs/ 等待楼主安装 LFS 成功的喜报

“等待楼主成功安装 LFS 的喜报” ...最近怎么总是语法错误的说

好吧,没看出来有语法错误,为何我觉得两个都正确。。

不存在安装“原版 Linux ”这个概念,只能编译和安装“ Linux 内核”。只有 Linux 内核你无法控制它,就像只给你一个汽车引擎,你无法驾驶它一样。 Linux 内核+发行版才是一个完整的操作系统。

初学者一上来就要搞自己的发行版,呵呵

Linux from Scratch +1

事实上我用 Ubuntu 也有两年时间了,我只是换一种方式问一下发行版对于 Linux kernel 的意义

lfs 大法

先从简单的元发行版 Gentoo 开始吧
Archlinux 下可以自己写 PKGBUILD 文件,编译安装 linux 内核。具体可参考 Arch 的 wiki

貌似跟 lfs 扯不上关系吧,为什么楼上那么多人都扯 lfs 。。。
要在发行版下编译自己的内核,要清楚发行版对内核的要求,譬如 systemd 还是 openrc 的等等。
至于驱动,注意主板,硬盘,网卡等基本就 ok 了,周边的可以等系统亮起来后再去完善。
玩过 gentoo 的,基本都有自己一份特有的 kernel .config 吧。

http://www.kroah.com/lkn/

make oldconfig 可以重用当前 config 。然后生成 initramfs 和配置 grub 看发行版的做法。有时候你还想自己配一堆驱动。
> 我只是换一种方式问一下发行版对于 Linux kernel 的意义
……意义? Linux kernel 只是 GNU 系统生态环境的一个可替换的核心而已。啊,拿错剧本了。没有发行版提供的 userspace , kernel 没什么用处啊。发行版还降低了各种配置差异造成的坑爹事,还有免去了你编译的痛苦。
----

按照原 po 那个标题,强调不属于发行版,又要默认获得一个能用的系统的话,那只能自己配用户程序走上 LFS 之路了。


下载一份原生的 linux kernel 代码,然后配置编译出符合自己机器的内核镜像。非常难。

牵涉的东西有点多,除了 bootloader 、内核,还有文件系统需要了解。
如果楼主真的想完成这么艰巨的任务,建议去买一块嵌入式开发板,支持 linux 的。厂家都会提供 bootloader 、内核和文件系统。一般 bootloader 不会提供代码。
把别人提供的东西玩熟了以后,自己也就找到感觉了。之所以建议从嵌入式开始,是因为嵌入式的硬件相对简单,文件系统也是比较小。比起 X86 平台的那些发行版不是一个数量级。


17 楼说的很有道理,从 arm 方面入手的话,相对简单很多,但是也涉及相当多的知识。
主要是内核方面的,一般做上层应用相关的人,对这些方面了解比较少。

Linux 不存在原版之类的,它就是一内核,没有各个发行版包含的那一堆外围的东西你根本用不了。

提倡学 lfs.你会理解很多东西






感谢!看了 LFS 项目的介绍,感觉非常适合解决我的问题

一下子到 4.x 了啊, 记得当初折腾时候还是 3.2.7, 大部分嵌入式设备还是 2.6.x

...
其实真的不存在“原版啦”……
如果不想追随任何一个发行版,可以试试 Linux from Scratch.
:)

我看到 Bastion The Kid 了!

哈哈,头像是 Bastion OST 封面的原画

lfs 大法好,楼主前途无量


其实配置没你想的难,关键看人是不是肯折腾

grub 就是 PC 常用的 bootloader ,网上有源码
内核一般默认配置就能用,编译了就好
至于文件系统,随便找个引导盘 /usb 来做就好,可以考虑使用 systemd 做 init
系统的基础可执行程序像 bash 等我没什么了解,不过这些工具功能都差不多,可以考虑直接用 busybox

http://www.bennee.com/~alex/blog/2014/05/09/running-linux-in-qemus-aarch64-system-emulation-mode/
这个例子是编 64 位内核的,换成 32 的会简单一些。

印象中 GitHub 上的是仓库的镜像。
可能这个才是 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/

是的,我写是镜像了, GitHub 看起来方便点

https://github.com/xylophone21/android-binder-standalone/blob/master/tools/aarch64_qemu/make_a_test_environment.md
这个是我之前调试其它模块时做的测试环境,使用 qemu 模拟器成功跑了自己编译的内核。

感谢,正在看 QEMU 的文档

Linux 只是内核,不是操作系统。
内核启动一段时间后,出现的第一个用户态进程是 init ,这部分代码负责启动 shell 等,但他压根不是内核源码的一部分,是发行版自己去提供的。
说白了,内核就是 资源管理 + 系统调用服务的合集 那些用户交互的部分与他无关

我感觉你在开玩笑,就像你要在只有 hal.dll 、 ntoskrnl.exe 、 win32k.sys 、 Ntdll.dll 、 Kernel32.dll 、 Csrss.exe 等玩意的情况下跑一个 windows 一样…
尽管 linux 是宏内核,包含的东西比上面那些多不少,但想要只靠内核跑系统未免还是有点虐了…

可以看我这个,开发测试 Linux 内核。
https://github.com/vonnyfly/linux-kernel-tester

Linux 不是发行版,是内核……
除了内核以外其他的组件都不是 Linux 的一部分……
你这些东西全部装完以后就是一个 vmlinuz 文件而已……

这是不是有点像 darwin 和 OS X 的关系?

帮你查了维基。
不是。
Darwin 是操作系统,内核叫做 XNU 。

为什么没人提起 CoreUtils 。
Linux 内核+Coreutils ,一个最基本的 Linux 发行版本出来了。

LFS 欢迎您的加入

LFS 的确符合你的要求,不过对于新人还是不建议一上来就搞这个,太折腾了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服