Debian 或 Ubuntu Linux 中的内核升级

Debian 或 Ubuntu Linux 中的内核升级

也就是说,以下命令有时会失败:

$ sudo reboot

终端上的最后一条消息,之后机器卡住,需要重新启动:

Restarting system.

我尝试了以下reboot=启动参数(来源) 没有成功:

  • 温暖的
  • 寒冷的
  • 三倍
  • 交流接口
  • 力量
  • 电喷

根据该页面上的建议,我通过运行以下命令进行验证,以确保更改生效:

$ cat /proc/cmdline

如果它可能有帮助,这里是内核模块的列表:

$ lsmod 
Module                  Size  Used by
ppp_generic            16680  0 
slhc                    4055  1 ppp_generic
ath9k_htc              50685  0 
mac80211              231186  1 ath9k_htc
ath9k_common            1720  1 ath9k_htc
ath9k_hw              338115  2 ath9k_htc,ath9k_common
ath                    13793  3 ath9k_htc,ath9k_common,ath9k_hw
cfg80211              158343  3 ath9k_htc,mac80211,ath
compat                 29364  5 ath9k_htc,mac80211,ath9k_common,ath9k_hw,cfg80211

这是在 ARM 系统上运行定制的 Linux2.6.35。另外,没有安装 X 服务器,因此没有桌面环境。

答案1

有以下几种方法:

须藤重新启动
须藤初始化6
须藤/sbin/重新启动

您可能也想尝试一下

echo 1 > /proc/sys/kernel/sysrq

echo b > /proc/sysrq-trigger

如果您有与 freedesktop 兼容的会话管理器,则可以使用 DBus 从 X 会话内部调用重新启动。命令如下:

dbus-send --system --dest=org.freedesktop.Hal --type=method_call \
    --print-reply /org/freedesktop/Hal/devices/computer \
    org.freedesktop.Hal.Device.SystemPowerManagement.Reboot int32:0

(这可能是不必要的;对我有用)。我在 shell 脚本中使用它。您不需要从 运行它root,但需要从 X 会话内部运行它(例如在终端中)。您可以在以下位置找到有关此主题的更多信息https://wiki.ubuntu.com/DebuggingGNOMEPowerManager

如果仍然遇到问题,请显示该命令的输出last reboot,该输出将显示自 Linux 下创建日志文件以来所有重新启动的日志,输入:

# 最后一次重启

我认为问题可能是由于这个漏洞和这个漏洞。尝试按照以下方法升级内核:

Debian 或 Ubuntu Linux 中的内核升级

使用apt-get命令。首先找到你的内核版本:

$ uname -r

接下来查找可用的内核映像:

$ apt-cache search linux-image

现在通过显式指定版本号来安装内核:

# apt-get install linux-image-x.x.x-xx

或者

$ sudo apt-get install linux-image-x.x.x-xx

更新:

执行此操作后,您还可以尝试设置reboot=pci内核引导标志。要使更改永久生效,请将rebooot=pci标志添加到GRUB_CMDLINE_LINUX的行中/etc/default/grub。欲了解更多信息,请查看此关联和这个关联

答案2

可能是时候考虑勇敢地学习一些内核调试了。

首先,找到与 gdb-remote 兼容的 JTAG 探针。您使用的是 ARM,因此您应该有很多选择,例如参见http://openocd.sourceforge.net/doc/html/Debug-Adapter-Hardware.html

其次,还有一些工作……在内核调试方面“男子气概”。谷歌是你的朋友,但这个提供了很好的初步概述和一些搜索术语:http://www.elinux.org/DebuggingTheLinuxKernelUsingGdb

你可能有很多新概念需要吸收。该视频提供了该过程的高级视图:http://www.youtube.com/watch?v=q07VvWS1qBc

http://www.wikihow.com/Solve-a-Problem对解决棘手问题有很好的建议。 GL!

答案3

这里有一些需要探索/检查的内容。我在一个内核版本 2.6.39 的 ARM Tegra 提交日志的提交日志:

Simon Glass (1):
ARM:tegra:修复重启时挂起的问题

我认为这是西蒙提交的补丁,标题为:[补丁 7/7] ARM:tegra:修复重启时挂起的问题,指的是:

From: Simon Glass <sjg@...>

We cannot use writel() here since the resulting wmb() calls l2x0_cache_sync()
which uses a spinlock and L1 cache may be off at this point.

Signed-off-by: Simon Glass <sjg@...>
Signed-off-by: Olof Johansson <olof@...>
---
 arch/arm/mach-tegra/common.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 34559d1..b1ecf60 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
 <at>  <at>  -41,7 +41,7  <at>  <at>  void tegra_assert_system_reset(char mode, const char *cmd)

    reg = readl(reset);
    reg |= 0x04;
-   writel(reg, reset);
+   writel_relaxed(reg, reset);
 }

 static __initdata struct tegra_clk_init_table common_clk_init_table[] = {
--

我认为您要么需要将此更改向后移植到 2.6.35,要么升级到较新的内核。

参考

答案4

实际上有一个古老的修复对于我的这个特殊问题。我希望在浪费这么多时间之前我能(神奇地)知道它。

作为旁注,该系统是VAB-800,它使用 Freescale i.MX537 Cortex-A8 SoC。

相关内容