V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Pastsong
V2EX  ›  Linux

如何从 Linux kernel source 安装原版(不属于任何发行版)的 Linux ?

  •  
  •   Pastsong ·
    timwangdev · 2015-12-19 12:15:48 +08:00 · 6191 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    Release v4.3 为例

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

    41 条回复    2015-12-21 00:38:35 +08:00
    haroldwu
        1
    haroldwu  
       2015-12-19 12:23:22 +08:00
    你還需要 shell XD
    crayygy
        2
    crayygy  
       2015-12-19 12:26:00 +08:00
    初学者比较好的还是选择一个发行版, Ubuntu 、 Fedora 、 CentOS 都行,个人比较建议 Ubuntu ,对初学者比较友好一些,外观上看也还行(个人看法),安装工具也挺方便。熟悉了之后再慢慢的接触其他发行版, CentOS 啊什么的
    squid157
        3
    squid157  
       2015-12-19 12:27:46 +08:00 via iPhone
    Linux from Scratch
    你可以先阅读一番 别上手 再回来考虑这个问题
    gimp
        4
    gimp  
       2015-12-19 12:29:42 +08:00   ❤️ 2
    http://www.linuxfromscratch.org/lfs/ 等待楼主安装 LFS 成功的喜报
    gimp
        5
    gimp  
       2015-12-19 12:30:31 +08:00
    “等待楼主成功安装 LFS 的喜报” ...最近怎么总是语法错误的说
    Slienc7
        6
    Slienc7  
       2015-12-19 12:39:53 +08:00
    @gimp 好吧,没看出来有语法错误,为何我觉得两个都正确。。
    shippo7
        7
    shippo7  
       2015-12-19 12:40:00 +08:00   ❤️ 4
    不存在安装“原版 Linux ”这个概念,只能编译和安装“ Linux 内核”。只有 Linux 内核你无法控制它,就像只给你一个汽车引擎,你无法驾驶它一样。 Linux 内核+发行版才是一个完整的操作系统。
    lhbc
        8
    lhbc  
       2015-12-19 12:42:55 +08:00 via Android
    初学者一上来就要搞自己的发行版,呵呵
    windfarer
        9
    windfarer  
       2015-12-19 12:43:27 +08:00 via Android
    Linux from Scratch +1
    Pastsong
        10
    Pastsong  
    OP
       2015-12-19 12:50:43 +08:00
    @lhbc 事实上我用 Ubuntu 也有两年时间了,我只是换一种方式问一下发行版对于 Linux kernel 的意义
    shyling
        11
    shyling  
       2015-12-19 13:03:01 +08:00 via iPad
    lfs 大法
    linhua
        12
    linhua  
       2015-12-19 13:05:19 +08:00
    先从简单的元发行版 Gentoo 开始吧
    Archlinux 下可以自己写 PKGBUILD 文件,编译安装 linux 内核。具体可参考 Arch 的 wiki
    regist
        13
    regist  
       2015-12-19 13:23:38 +08:00   ❤️ 1
    貌似跟 lfs 扯不上关系吧,为什么楼上那么多人都扯 lfs 。。。

    要在发行版下编译自己的内核,要清楚发行版对内核的要求,譬如 systemd 还是 openrc 的等等。

    至于驱动,注意主板,硬盘,网卡等基本就 ok 了,周边的可以等系统亮起来后再去完善。

    玩过 gentoo 的,基本都有自己一份特有的 kernel .config 吧。
    Comphuse
        14
    Comphuse  
       2015-12-19 15:03:44 +08:00
    Arthur2e5
        15
    Arthur2e5  
       2015-12-19 15:23:13 +08:00   ❤️ 1
    make oldconfig 可以重用当前 config 。然后生成 initramfs 和配置 grub 看发行版的做法。有时候你还想自己配一堆驱动。

    > 我只是换一种方式问一下发行版对于 Linux kernel 的意义

    ……意义? Linux kernel 只是 GNU 系统生态环境的一个可替换的核心而已。啊,拿错剧本了。没有发行版提供的 userspace , kernel 没什么用处啊。发行版还降低了各种配置差异造成的坑爹事,还有免去了你编译的痛苦。

    ----

    @regist
    按照原 po 那个标题,强调不属于发行版,又要默认获得一个能用的系统的话,那只能自己配用户程序走上 LFS 之路了。
    402124773
        16
    402124773  
       2015-12-19 15:24:49 +08:00   ❤️ 1
    @Pastsong
    下载一份原生的 linux kernel 代码,然后配置编译出符合自己机器的内核镜像。非常难。
    wizardoz
        17
    wizardoz  
       2015-12-19 15:31:06 +08:00   ❤️ 1
    牵涉的东西有点多,除了 bootloader 、内核,还有文件系统需要了解。
    如果楼主真的想完成这么艰巨的任务,建议去买一块嵌入式开发板,支持 linux 的。厂家都会提供 bootloader 、内核和文件系统。一般 bootloader 不会提供代码。
    把别人提供的东西玩熟了以后,自己也就找到感觉了。之所以建议从嵌入式开始,是因为嵌入式的硬件相对简单,文件系统也是比较小。比起 X86 平台的那些发行版不是一个数量级。
    402124773
        18
    402124773  
       2015-12-19 15:36:37 +08:00
    @wizardoz
    17 楼说的很有道理,从 arm 方面入手的话,相对简单很多,但是也涉及相当多的知识。
    主要是内核方面的,一般做上层应用相关的人,对这些方面了解比较少。
    jasontse
        19
    jasontse  
       2015-12-19 15:39:20 +08:00 via iPad   ❤️ 1
    Linux 不存在原版之类的,它就是一内核,没有各个发行版包含的那一堆外围的东西你根本用不了。
    webjin
        20
    webjin  
       2015-12-19 15:48:53 +08:00 via Android
    提倡学 lfs.你会理解很多东西
    Pastsong
        21
    Pastsong  
    OP
       2015-12-19 15:58:47 +08:00
    @squid157
    @gimp
    @windfarer
    @webjin
    @shyling
    感谢!看了 LFS 项目的介绍,感觉非常适合解决我的问题
    DingSoung
        22
    DingSoung  
       2015-12-19 16:32:08 +08:00
    一下子到 4.x 了啊, 记得当初折腾时候还是 3.2.7, 大部分嵌入式设备还是 2.6.x
    GNiux
        23
    GNiux  
       2015-12-19 17:58:37 +08:00 via iPhone
    ...

    其实真的不存在“原版啦”……

    如果不想追随任何一个发行版,可以试试 Linux from Scratch.
    :)
    itoon
        24
    itoon  
       2015-12-19 18:09:18 +08:00
    我看到 Bastion The Kid 了!
    Pastsong
        25
    Pastsong  
    OP
       2015-12-19 18:20:28 +08:00
    @itoon 哈哈,头像是 Bastion OST 封面的原画
    ryd994
        26
    ryd994  
       2015-12-19 18:54:03 +08:00 via Android
    lfs 大法好,楼主前途无量
    aa45942
        27
    aa45942  
       2015-12-19 19:03:02 +08:00   ❤️ 1
    @wizardoz
    其实配置没你想的难,关键看人是不是肯折腾
    @Pastsong
    grub 就是 PC 常用的 bootloader ,网上有源码
    内核一般默认配置就能用,编译了就好
    至于文件系统,随便找个引导盘 /usb 来做就好,可以考虑使用 systemd 做 init
    系统的基础可执行程序像 bash 等我没什么了解,不过这些工具功能都差不多,可以考虑直接用 busybox
    xylophone21
        28
    xylophone21  
       2015-12-19 20:49:12 +08:00
    http://www.bennee.com/~alex/blog/2014/05/09/running-linux-in-qemus-aarch64-system-emulation-mode/

    这个例子是编 64 位内核的,换成 32 的会简单一些。
    ziqin
        29
    ziqin  
       2015-12-19 20:51:54 +08:00
    印象中 GitHub 上的是仓库的镜像。
    可能这个才是 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/
    Pastsong
        30
    Pastsong  
    OP
       2015-12-19 20:57:40 +08:00
    @ziqin 是的,我写是镜像了, GitHub 看起来方便点
    xylophone21
        31
    xylophone21  
       2015-12-19 20:59:35 +08:00
    https://github.com/xylophone21/android-binder-standalone/blob/master/tools/aarch64_qemu/make_a_test_environment.md

    这个是我之前调试其它模块时做的测试环境,使用 qemu 模拟器成功跑了自己编译的内核。
    Pastsong
        32
    Pastsong  
    OP
       2015-12-19 21:12:00 +08:00
    @xylophone21 感谢,正在看 QEMU 的文档
    inevermore
        33
    inevermore  
       2015-12-19 21:33:30 +08:00
    Linux 只是内核,不是操作系统。
    内核启动一段时间后,出现的第一个用户态进程是 init ,这部分代码负责启动 shell 等,但他压根不是内核源码的一部分,是发行版自己去提供的。

    说白了,内核就是 资源管理 + 系统调用服务的合集 那些用户交互的部分与他无关
    wdhwg001
        34
    wdhwg001  
       2015-12-19 22:01:57 +08:00
    我感觉你在开玩笑,就像你要在只有 hal.dll 、 ntoskrnl.exe 、 win32k.sys 、 Ntdll.dll 、 Kernel32.dll 、 Csrss.exe 等玩意的情况下跑一个 windows 一样…
    尽管 linux 是宏内核,包含的东西比上面那些多不少,但想要只靠内核跑系统未免还是有点虐了…
    vonnyfly
        35
    vonnyfly  
       2015-12-19 22:14:23 +08:00
    可以看我这个,开发测试 Linux 内核。
    https://github.com/vonnyfly/linux-kernel-tester
    msg7086
        36
    msg7086  
       2015-12-19 22:33:46 +08:00
    Linux 不是发行版,是内核……
    除了内核以外其他的组件都不是 Linux 的一部分……
    你这些东西全部装完以后就是一个 vmlinuz 文件而已……
    Pastsong
        37
    Pastsong  
    OP
       2015-12-19 22:39:13 +08:00
    @msg7086 这是不是有点像 darwin 和 OS X 的关系?
    msg7086
        38
    msg7086  
       2015-12-19 22:43:51 +08:00
    @Pastsong 帮你查了维基。

    不是。
    Darwin 是操作系统,内核叫做 XNU 。
    extreme
        39
    extreme  
       2015-12-19 22:48:03 +08:00
    为什么没人提起 CoreUtils 。
    Linux 内核+Coreutils ,一个最基本的 Linux 发行版本出来了。
    FreeTxT
        40
    FreeTxT  
       2015-12-20 16:43:44 +08:00 via iPad
    LFS 欢迎您的加入
    Mithrandir
        41
    Mithrandir  
       2015-12-21 00:38:35 +08:00
    LFS 的确符合你的要求,不过对于新人还是不建议一上来就搞这个,太折腾了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2779 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:48 · PVG 19:48 · LAX 03:48 · JFK 06:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.