当前位置:  开发笔记 > 编程语言 > 正文

如何从内核到UI层构建Linux系统

如何解决《如何从内核到UI层构建Linux系统》经验,为你挑选了2个好方法。

我一直在研究MeeGo,maemo,Android架构.他们都有Linux内核,在其上构建一些库,然后构建中间层库[例如电话,媒体等...].假设我瓦纳建立自己的系统,比如Linux内核,与像glibc的一些binariers,乌思,.... UI工具包像GTK +和它的二进制文件.我想从源代码编译每个项目,为桌面,上网本和手持设备定制我自己的linux系统.[从netbook开始第一个:)]我如何构建自己的自定义系统从内核到UI.



1> Tim Post..:

我提前道歉,对你认为非常简单的问题做了很长时间的回答.不幸的是,以一致和统一的方式将来自许多不同位的整个操作系统拼凑在一起并不是一项微不足道的任务.我目前正在开发自己的基于Xen的发行版,到目前为止我将分享我的经验(除了Linux From Scratch):

1 - 确定范围并坚持下去

如果你有希望实际完成这个项目,你需要写一个新操作系统的说明,并在一个段落中完成.将其打印出来并将其贴在墙上,直接放在你面前.阅读它,念诵它,练习向后倾斜,以及其他任何可能帮助你直接将它保持在屈服于特征蠕变的冲动之前.

2 - 决定包管理器

这可能是您将做出的最重要的决定.您需要决定如何维护操作系统的更新和新版本,即使您是唯一的订户.任何人,包括使用新操作系统的人,肯定会发现需要安装未包含在基本发行版中的内容.即使您正在推出一个操作系统来为信息亭供电,它对所有部署至关重要,以便以理智和一致的方式保持自己的最新状态.

我最终使用apt-rpm,因为它提供了流行的.rpm包格式的灵活性,同时在依赖性方面利用了apt的已知健全性.您可能更喜欢使用yum,apt .deb包,slackware样式.tgz包或您自己的格式.

快速决定,因为它将决定你如何构建你的构建.跟踪每个组件中的依赖关系,以便以后轻松滚动包.

3 - 重新读取范围,然后配置内核

kitchen sink制作内核时避免综合症.看看你想要完成什么,然后决定内核必须支持什么.您可能需要完整的小工具支持,与其他流行操作系统的文件系统的兼容性,适用于进行大量浏览的人的安全钩等.您不需要支持疯狂的RAID配置,高级netfilter目标和minixfs,但是wifi更好的工作.您不需要10GBE或infiniband支持.仔细检查内核配置.如果您无法证明包含模块的潜在用途,请不要检查它.

除非你绝对需要,否则避免从树形树干中拔出.人们不时会提出新的调度算法,实验文件系统等.维护一个除了主线以外的任何东西都要消耗的内核是非常非常困难的.

当然也有例外.如果走出树是满足您范围内所述目标的唯一方法.请继续关注您将来为自己做多少工作.

4 - 重新阅读您的范围,然后选择您的基本用户区

至少,你需要一个shell,核心实用程序和一个没有窗口管理器的编辑器.注意依赖关系将告诉您,您还需要一个C库以及使基本命令工作所需的任何其他内容.正如Eli所说,Linux From Scratch是一个很好的资源来检查.我还强烈建议查看LSB(Linux标准库),这是一个规范,列出了"预期"包含在任何发行版中的常见软件包和组件.不要将LSB作为标准,将其建议与您的范围进行比较.如果您的操作系统的目的不需要包含某些内容,那么您安装的内容将取决于它,不包括它.

5 - 重新阅读范围并决定窗口系统

再一次,提到这个everything including the kitchen sink综合症,试着抵制在你的基础操作系统上点击KDE或GNOME的库存安装并将其调用完成的冲动.另一个常见的缺陷是安装一个完整的版本,并通过删除不需要的东西向后工作.为了理解依赖性,从底层而不是自上而下处理它真的更好.

快速确定您的发行版将支持的UI工具包并获得它(使用支持库).快速定义UI中的一致性并坚持下去.没有什么比打开10个窗口更令人烦恼,就控制而言,它们的行为完全不同.当我看到这个时,我诊断出具有多重人格障碍的操作系统,并希望对其开发人员进行治疗.关于Ubuntu移动窗口控件的问题只是一片哗然,而且他们一直在做这件事.不一致的是版本之间的行为变化.如果他们无法立即找到按钮或必须增加鼠标里程,人们会感到非常沮丧.

6 - 重新阅读您的范围并选择您的申请

这里也避免厨房水槽综合症.选择您的应用程序不仅取决于您的范围和受欢迎程度,还包括它们对您维护的难易程度.你很可能会将自己的补丁应用到他们身上(即使是简单的补丁,如更新工具栏上闪烁的灯光).

在选择要包含的内容时,记住要支持的每个体系结构非常重要.例如,如果Valgrind是您最好的朋友,请注意您将无法使用它来调试某些ARM平台上的问题.

假装你是一家公司,并将成为那里的员工.贵公司是否通过了Joel考试?考虑像Hudson这样的持续集成系统.随着你的进步,它会为你节省很多头发.

当您开始统一所有这些组件时,您自然会建立自己的SDK.随时记录,避免一时兴起(一直参考你的范围).只需让它完全可以接受linux be linux,这将你的SDK变成了正式的指导方针而不是其他任何东西.

就我而言,我很幸运能够开发一些严格设计为服务器操作系统的东西.我不必处理桌面警告,我不羡慕任何人.

7 - 其他建议

这些是随机顺序,但注意它们可能会节省您一些时间:

按编号顺序将修补程序集维护到您修改的每个上游代码行.一个例子可能是00-make-bash-clairvoyant.patch,这允许您维护补丁而不是上游代码的整个分叉存储库.你以后会为此感谢你.

如果组件具有测试套件,请确保为您引入的任何内容添加测试.很容易说"很好,它有效!" 请记住,您可能会在以后添加更多内容,这可能会破坏您之前添加的内容.

在引入上游代码时,使用作者正在使用的任何版本控制系统.这使得新代码的合并变得更加简单,并且可以减少重新编写补丁的时间.

即使您认为上游作者对您的更改不感兴趣,至少要提醒他们存在这些更改.协调是必不可少的,即使您只是了解到您刚刚投入的功能已经在规划中,并且将来会以不同的方式实施.

您可能确信您将是唯一一个使用您的操作系统的人.设计它好像数百万人将使用它,你永远不会知道.这种想法有助于避免冲突.

无论诱惑是什么,都不要拉上游的alpha代码.红帽尝试过,但效果不佳.坚持稳定版本,除非您正在修复错误.主要错误修复通常会导致上游版本,因此请务必观察并协调.

请记住它应该很有趣.

最后,要意识到滚动整个从零开始的分布比分支现有分布更简单,只需添加您认为缺乏的任何东西.您需要经常通过启动操作系统并实际有效地使用它来奖励自己.如果你太沮丧,一直感到困惑或者发现自己在推迟工作,可以考虑制作一个Debian或Ubuntu的轻量级分支.然后,您可以从头开始重新复制它.与将应用程序用更简单/快速的语言进行原型设计之前没有什么不同for real.如果你想走这条路(第一个),gNewSense提供的工具可以直接从Ubuntu分叉你自己的操作系统.注意,默认情况下,它们的实用程序将从生成的发行版中删除任何非空闲位(包括二进制内核blob).

我强烈建议完全从头开始(首先),因为你将获得的经验远远大于另一个分叉.但是,实际完成项目也很重要.Best是主观的,做对你有用的.

祝你的项目好运,看看你的发现.



2> Eli Bendersk..:

查看Linux From Scratch:

Linux From Scratch(LFS)是一个项目,为您提供完全从源代码构建自己的自定义Linux系统的分步说明.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有