为嵌入式设备选择内核版本时需要考虑哪些因素?

为嵌入式设备选择内核版本时需要考虑哪些因素?

我已经使用 buildroot 成功创建了内核、根文件系统和交叉编译器,使我能够编写在嵌入式设备上运行的应用程序代码。目前我不需要编写设备驱动程序,也不知道如何去做,但将来我很可能需要这样做。通过我的研究,我了解到内核 API 可以在版本之间发生变化,并且与编写用户级应用程序不同,编写设备驱动程序是特定于内核版本的。基本上我想知道:

  1. 以上是否正确?
  2. 在决定使用哪个内核版本时需要考虑哪些因素?

我问这个问题的原因是,从我读过的有关该主题的所有文献(以及参加嵌入式 Linux 课程)中,都涉及 2.6.x 版本内核。我正在使用 3.6.11 内核通过嵌入式系统进行构建,但我想知道为什么课程和文献似乎涉及这些较旧的内核。使用旧版本内核有什么好处,或者使用新版本有缺点吗?

答案1

3.x 只是 2.x 的延续 - Linus 有一次认为该版本的“x”部分太大了。一般来说,您可能需要相当新的内核,可能标记为“长期”。很大程度上还取决于您的应用程序 - 虽然内核中的远程安全漏洞相当稀有,但本地问题更为普遍。

答案2

选择内核是一个约束问题:

  1. 内核必须足够新才能可靠地支持您正在运行的硬件(即:NIC 驱动程序)
  2. 内核必须足够新才能可靠地支持您计划使用的软件功能(即:iptables)
  3. 内核必须足够新才能消除尽可能多的漏洞
  4. 内核必须足够老才能被证明是可靠的(有“前沿”之类的东西)
  5. 内核必须是会接收长期更新的系列(除非它是一个一旦部署就没有机会更新的系统,那么这并不重要,但你必须更加重视#4和#3)

一旦您浏览完该列表,实际满足您需求的内核列表往往非常小,因此解决方案往往很明确。

答案3

不能只使用最新的稳定内核吗?如果您有设备驱动程序的旧源代码,我认为您应该检查的是设备名称是否匹配(就像/dev/eth0- /dev/enp2s0f0> 我仍然不知道为什么这有什么好处)。

相关内容