imx6 reboot指令无法重启 & kernel 停留在start kernel ......

2023-11-13

reboot指令无法重启:

log:

root@imx6dlsabresd:~#reboot

 

Thesystem is going down for reboot NOW!d (ttymxc0) (Tue Oct 11 06:41:03 2016

INIT:Switching to runlevel: 6

INIT:Sending processes the TERM signal

root@imx6dlsabresd:~#Stopping Dropbear SSH server: stopped /usr/sbin/dropbear (pid 385)

dropbear.

 *Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon

 

[ok ]rofile-server:444): WARNING **: Avahi error: Daemon connection failed

Stoppingadvanced power management daemon: no /usr/sbin/apmd found; none killed

apmd.

Stoppingsystem message bus: dbus.

stoppingmountd: done

stoppingnfsd: done

StoppingOProfileUI server

Stoppingsyslogd/klogd: stopped syslogd (pid 413)

stoppedklogd (pid 417)

done

stoppingstatd: done

StoppingTelephony daemon

ALSA:Storing mixer settings...

Stoppingrpcbind daemon...

done.

StoppingLinux NFC daemon

Deconfiguringnetwork interfaces... done.

Sendingall processes the TERM signal...

logout

Sendingall processes the KILL signal...

Unmountingremote filesystems...

Deactivatingswap...

Unmountinglocal filesystems...

Rebooting...reboot: Restarting system // /在这里死机,无法软重启,可以用watchdog来打来Bypass


Bypass 的应用

Bypass一般按照控制方式或者称为触发方式来分,可以分为以下几个方式

1通过电源触发。这种方式下,一般是在设备没有通电的情况下,Bypass功能打开,如果设备一旦通电后,Bypass立即调整为关闭状态。

2GPIO来控制。在进入OS后,可以通过GPIO来对特定的端口操作,从而实现对Bypass开关的控制。

3Watchdog来控制。这种情况实际是对方式2的一种延伸应用,可以通过Watchdog来控制GPIO Bypass程序的启用与关闭,从而实现对Bypass状态的控制。使用这种方式后,平台如果死机就可以由Watchdog来打开Bypass



解决方法:

vi arch/arm/boot/dts/imx6qdl-goembed.dtsi :


使uboot检测到看门狗:备注:gpc --> General Power Controller ,电源控制



kernel 停留在start kernel ......

解决方法:

1.看门狗问题,可能会造成这种显现。

2.IMX6Q的PMU被bypass导致cpu没有供电而无法开机,只要donwload imx6q ldo版本的boot image即可。

log:

U-Boot 2015.04-14409-g6cf684a-dirty (Mar 10 2016 – 13:56:17)

CPU: Freescale i.MX6Q rev1.5 at 792 MHz
CPU: Temperature 27 C
Reset cause: POR
Board: MX6-SabreSD
I2C: ready
DRAM: 2 GiB
PMIC: PFUZE100 ID=0x10
MMC: FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
*** Warning – bad CRC, using default environment

No panel detected: default to Hannstar-XGA
Display: Hannstar-XGA (1024×768)
In: serial
Out: serial
Err: serial
check_and_clean: reg 0, flag_set 0
Fastboot: Normal
flash target is MMC:1
Net: Phy 1 not found
PHY reset timed out
FEC [PRIME]
Error: FEC address not set.

Normal Boot
Hit any key to stop autoboot: 0
boota mmc1
kernel @ 14008000 (7272264)
ramdisk @ 15000000 (868699)
fdt @ 14f00000 (44216)
## Current stack ends at 0x8ef3cbf0 ## Booting Android Image at 0x12000000 …
Kernel load addr 0x14008000 size 7102 KiB
Kernel command line: console=ttymxc1,115200 init=/init video=mxcfb0:dev=ldb,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off vmalloc=256M androidboot.console=ttymxc1 consoleblank=0 androidboot.hardware=freescale cma=384M
kernel data at 0x12000800, len = 0x006ef748 (7272264)
* fdt: cmdline image address = 0x14f00000
## Checking for ‘FDT’/’FDT Image’ at 14f00000
* fdt: raw FDT blob
## Flattened Device Tree blob at 14f00000
111 Booting using the fdt blob at 0x14f00000
of_flat_tree at 0x14f00000 size 0x0000acb8
Loading Kernel Image … OK
kernel loaded at 0x14008000, end = 0x146f7748
using: FDT
Using Device Tree in place at 14f00000, end 14f0dcb7
## Transferring control to Linux (at address 14008000)…
switch to ldo_bypass mode!
Starting kernel …

思路:

说明kernel和dts都已经找到,但是kernel一条log都没有。

本来想参考

https://community.freescale.com/thread/385298

在reset之后通过u-boot的命令来dump ddr中的ddr log,

无奈我们的硬件设计是cold reset, memory信息都丢失,无法抓log。

此问题断断续续困扰了我好几天,检查了dts和kernel中compatible确实也是一致的,

修改过的uart配置应该也没有问题。

u-boot 中有条log让我很好奇:

switch to ldo_bypass mode.

记得build bootimage的时候有个boot-imx6q-ldo.img,试了下,居然开机进kernel了!!!

原因:

IMX6Q提供了ldo bypass功能,这是什么东西呢?先看下图:
20160310170755315

图一 使用内部PMU的LDO即非bypass

20160310170831885
图二 使用外部PMIC而直接bypass内部PMU

两图的区别在于图二的VDDARM_IN直接短接到了VDD_ARM_CAP而作为cpu的电源,而图一是需要经过LDO电压转换的。

如果要使用bypass功能,那么硬件上必须要使用图二,否则VDD_ARM_CAP是没有电的。

PS: VDDARM_IN从外部PMIC输出的。

boot-imx6q-ldo.img 和boot-imx6q.img的区别在于:

kernel_imx/arch/arm/boot/dts/imx6q-sabresd-ldo.dts

……
#include “imx6q-sabresd.dts”

&cpu0 {
arm-supply = <&reg_arm>;
soc-supply = <&reg_soc>;
};

&gpc {
/* use ldo-enable, u-boot will check it and configure */
fsl,ldo-bypass = <0>;
/* watchdog select of reset source */
fsl,wdog-reset = <1>;
};
……

这些property会覆盖kernel_imx/arch/arm/boot/dts/imx6qdl-sabresd.dts里的配置:

&gpc {
/* use ldo-bypass, u-boot will check it and configure */
fsl,ldo-bypass = <1>;
fsl,wdog-reset = <2>;
};
&cpu0 {
arm-supply = <&sw1a_reg>;
soc-supply = <&sw1c_reg>;
};

arm-supply和soc-supply默认使用的是PMIC的电源,改成了内部PMU的reg_arm和reg_soc.

那么fsl,ldo-bypass怎么被用到的呢?且看u-boot!

cpu.c

void arch_preboot_os(void)
{
……
#if defined(CONFIG_LDO_BYPASS_CHECK)
ldo_mode_set(check_ldo_bypass());
#endif
…..
}

soc.c

int check_ldo_bypass(void)
{
……
ldo_mode = fdt_getprop(gd->fdt_blob, node, “fsl,ldo-bypass”, NULL);
/*
* return 1 if “fsl,ldo-bypass = <1>“, else return 0 if
* “fsl,ldo-bypass = <0>” or no “fsl,ldo-bypass” property
*/
ldo_bypass = fdt32_to_cpu(*ldo_mode) == 1 ? 1 : 0;

return ldo_bypass;
}

mx6qecovacs.c

#ifdef CONFIG_LDO_BYPASS_CHECK
void ldo_mode_set(int ldo_bypass)
{
……
/* switch to ldo_bypass mode , boot on 800Mhz */
if (ldo_bypass) {
prep_anatop_bypass();
if (is_mx6dqp()) {
/* decrease VDDARM for 400Mhz DQP:1.1V*/
pmic_reg_read(p, PFUZE100_SW2VOL, &value);
value &= ~0x3f;
value |= 0x1c;
pmic_reg_write(p, PFUZE100_SW2VOL, value);
} else {
/* decrease VDDARM for 400Mhz DQ:1.1V, DL:1.275V */
pmic_reg_read(p, PFUZE100_SW1ABVOL, &value);
value &= ~0x3f;
#if defined(CONFIG_MX6DL)
value |= 0x27;
#else
value |= 0x20;
#endif

pmic_reg_write(p, PFUZE100_SW1ABVOL, value);
}
/* increase VDDSOC to 1.3V */
pmic_reg_read(p, PFUZE100_SW1CVOL, &value);
value &= ~0x3f;
value |= 0x28;
pmic_reg_write(p, PFUZE100_SW1CVOL, value);

/*
* MX6Q/DQP:
* VDDARM:1.15V@800M; VDDSOC:1.175V@800M
* VDDARM:0.975V@400M; VDDSOC:1.175V@400M
* MX6DL:
* VDDARM:1.175V@800M; VDDSOC:1.175V@800M
* VDDARM:1.075V@400M; VDDSOC:1.175V@400M
*/
is_400M = set_anatop_bypass(2);
if (is_mx6dqp()) {
pmic_reg_read(p, PFUZE100_SW2VOL, &value);
value &= ~0x3f;
if (is_400M)
value |= 0x17;
else
value |= 0x1e;
pmic_reg_write(p, PFUZE100_SW2VOL, value);
}

if (is_400M)
#if defined(CONFIG_MX6DL)
vddarm = 0x1f;
#else
vddarm = 0x1b;
#endif
else
#if defined(CONFIG_MX6DL)
vddarm = 0x23;
#else
vddarm = 0x22;
#endif
pmic_reg_read(p, PFUZE100_SW1ABVOL, &value);
value &= ~0x3f;
value |= vddarm;
pmic_reg_write(p, PFUZE100_SW1ABVOL, value);

/* decrease VDDSOC to 1.175V */
pmic_reg_read(p, PFUZE100_SW1CVOL, &value);
value &= ~0x3f;
value |= 0x23;
pmic_reg_write(p, PFUZE100_SW1CVOL, value);

finish_anatop_bypass();
printf(“switch to ldo_bypass mode!\n”);
}
}
#endif

也就是说u-boot会根据dts中的ldo-bypass值来修改PMIC的输出电压,而我们硬件却是用的内部PMU方案!

参考:

1. IMX6Q datasheet

2. https://community.freescale.com/thread/385298

3. https://community.freescale.com/message/507621

4.http://blog.csdn.net/kris_fei/article/details/50848099

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

imx6 reboot指令无法重启 & kernel 停留在start kernel ...... 的相关文章

  • Ubuntu系统修复、系统安装与系统备份

    一 Ubuntu系统修复 1 正常开机无法进入图形界面 卡logo 无法进入系统图形化界面 但是ctrl alt F1 能够进入tty1命令行界面进行操作 解决办法 通过命令行进入 需要重新配置网卡 ifconfig eth0 192 16
  • C# 提取字体点阵字模数据

    MCU 项目的 GUI 需要显示文字 没找到合适的 于是 用 Visual C 2008 写了一个字模提取程序 目前能导出数据 但还没来得及测试数据正确性 项目托管地址 https github com memstone mosFontTo
  • 【Flutter 2-7】Flutter手把手教程UI布局和Widget——垂直布局控件Column

    Column Column是在Flutter中常见的布局控件 它负责垂直方向布局 Row负责水平方向布局 二者都是继承于Flex 类似于iOS里面的UIScrollView 但是又有很多不同 先来看一下Column的构造函数 Column
  • 华为OD机试 Python【数字整除】

    题目 小明正在玩一种特别的牌游戏 这个游戏的玩法如下 小明先拿到一张牌 上面有一个数字m 然后 他会依次拿到n张牌 这些牌连成一排 小明的挑战是 从这n张牌中 找到连在一起的一串牌 使它们的数字和能被m整除 你的任务 对于每一轮游戏 判断小
  • DataInputStream和DataOutputStream的基本使用

    字节流 InputStream类 OutputStream类 字符流 Reader类 Writer类 DataInputStream和DataOutputStream是一对可以直接读取基本类型数据的流 简化了对基本数据类型的读写操作 Dat
  • Java常用日志框架介绍

    Java日志概述 对于一个应用程序来说日志记录是必不可少的一部分 线上问题追踪 基于日志的业务逻辑统计分析等都离不日志 java领域存在多种日志框架 目前常用的日志框架包括Log4j 1 Log4j 2 Commons Logging Sl
  • 如何将Kali Linux中的Firefox浏览器语言设置为中文

    我们在使用kali这个工具的时候 打开Firefox浏览器 对于英文不是很好的人很不友好 那么怎么设置成中文呢 其实很简单 不用通过行也可以实现 1 首先需要打开我们的Firefox浏览器 点击这里 2 选择设置 3 找到语言设置 找到中文
  • 有哪些初学者程序员不知道的小技巧?

    提到新手程序员 大家想到的第一个词可能就是 刷题 尤其是通过LeetCode刷题 想必新手程序员们都经历过这一步 甚至不少人认为只要在LeetCode上刷的题目够多 就一定能够进阶为大神 但是 不难发现 LeetCode上的题目都是算法片段
  • Java程序员最常用的6个代码对比工具,架构师一定收藏

    Java程序员最常用的6个代码对比工具 架构师一定收藏 在Java程序开发的过程中 程序员会经常对源代码以及库文件进行代码对比 那么今天在这篇文章里我们给大家介绍六款程序员常用的代码比较工具 希望对大家会有帮助 WinMerge WinMe
  • openGL之API学习(六)如何绑定深度缓冲区到片元着色器

    本质是使用帧缓冲区glBindFramebuffer GL FRAMEBUFFER m fbo 深度缓存是帧缓冲区的一个挂载点 在OpenGL中3d管线输出的结果称为 帧缓冲对象 简称FBO FBO可以挂载颜色缓冲 在屏幕上显示 深度缓冲区
  • 一文教你搞懂python函数装饰器(wrapper)

    python函数装饰器 函数装饰器 定义一个装饰器后 调用该装饰器 个人理解是在目标函数前后做一些操作 例如 定义一个鉴权的函数装饰器 在给目标函数的时候添加装饰函数就可以做到先鉴权 鉴权成功再运行目标函数 装饰器模板参考如下 模板 装饰器
  • 禅道bug等级说明

    禅道Bug等级划分标准 一 严重程序 P1 致命 该问题在测试中较少出现 一旦出现应立即中止当前版本测试 阻碍开发或测试工作的问题 造成系统崩溃 死机 死循环 导致数据库数据丢失 与数据库连接错误 主要功能丧失 基本模块缺失等问题 如 代码
  • matlab 虚数 .,关于MATLAB在复数方面的应用 – MATLAB中文论坛

    最近 看到有不少朋友问MATLAB在复数方面的应用问题 特此发个帖子 给大家分享点资料 matlab在复数中的应用 1 复数的生成 复数生成语句 其中theta为复数辐角的弧度值 r为复数的模 z a b i z a bi z r exp
  • 小程序上传图片(拍照或从相册选择)chooseMedia

    let that this wx chooseMedia count 1 最多可以选择的图片张数 默认9 mediaType image sourceType album camera success res console log res
  • CSS flex 属性

    flex basis flex basis属性规定弹性项目的初始长度 那么我们随便写一串简单的代码来看看flex basis的效果如何 代码如下
  • DVWA low难度全通关

    low难度 1 暴力破解 抓包 破解成功 2 命令执行 我们可以用通道符绕过 也行 3 跨站请求伪造 这里把url发给登陆了的用户 就可以密码修改成功了 4 文件包含 通过这样来访问到phpinfo php 5 文件上传 毫无防备 可以直接
  • Python目前建议最好安装什么版本的?

    Python2 7及以前的版本 已经被淘汰了 图片来源 Python1 1 1 6下载地址 https www python org download releases 在Python1 5 2版本之前 Python官网只提供源代码的下载
  • 使用stream将List转换为用逗号拼接的字符串

    摘要 有时候需要将List中的元素转换为用逗号拼接的字符串 很简单的实现 略略写一下stream的实现 实现 使用stream实现 public void test List
  • Linux多线程:线程分离

    第三方的线程库 Compile and link with pthread The pthread detach function marks the thread identified by thread as detached When
  • python14异常处理

    1 错误 有的错误是程序编写有问题造成的 比如本来应该输出整数结果输出了字符 串 这种错误我们通常称之为 bug bug 是必须修复的 有的错误是用户输入造成的 比如让用户输入 email 地址 结果得到一个空字 符串 这种错误可以通过检查

随机推荐

  • 克鲁斯卡尔算法(kruskal)

    我自己感觉 克鲁斯卡尔算法比普利姆算法更好理解 它就两个要点 排序和判断是否成环 排序 我们把两两相邻的边根据边的权值 从小到大依次排序 这个十大排序算法可以自己选一个去实现下 刚好还可以回忆下以前的算法 下面我们使用冒泡来实现边的排序 是
  • CentOS8搭建Web服务器笔记1 Nginx+Php8基础环境

    CentOS8搭建Web服务器笔记1 Nginx Php8基础环境 1 Nginx 1 1 Yum工具安装 1 1 1 查询Yum默认安装源版本 1 1 2 配置最新安装源 1 1 3 yum安装nginx 1 1 4 启动nginx服务
  • 4.4 Go语言中的单元测试

    基本概念 上一节提到 代码完成的标准之一还包含了单元测试 这部分也是很多开发流程中不规范的地方 写过单元测试的开发人员应该理解 单元测试最核心的价值是为了证明 为什么我写的代码是正确的 也就是从逻辑角度帮你检查你的代码 但是另外一方面 如果
  • 谈谈古典的《拆掉思维里的墙》

    写在前面 这是考完高考 拿到深圳大学录取通知书之后 年级发布的第一个作业 就是看一篇年级推荐的书写一篇读后感 不过写完回校之后年级居然把这事给忘记了 写了文章没人看不是很好 于是就放上C站呆着 留点痕迹 也许算正文 距离上一次写读后感已经不
  • 决策树(Decision Tree)

    文章目录 1 决策树简介 2 决策树原理 2 1 引例 2 2 生成算法 2 2 1 ID3 信息增益 2 2 2 C4 5 信息增益率 2 2 3 CART 基尼指数 2 3 三种算法的对比 2 4 剪枝处理 2 4 1 预剪枝 2 4
  • 怎么让VSCode标签栏只展示一个窗口

    怎么让VSCode标签栏只展示一个窗口 问题 解决方法 参考 问题 我们希望VSCode窗口的标签栏是这么分开显示标签的 但是 偶尔重启该应用 会突然发现变成了只显示一个标签 不会再分开展示了 变成了一个文件名加路径了 这种情况下原来的标签
  • Oracle 表空间、段、区、块概述

    文章目录 图示 表空间 tablespace 数据段 segment 区 extent 数据块 block 图示 修改中 请稍等 段 存在于 表空间 中 段 是 区 的集合 区 是 数据块 的集合 数据块 会映射到 磁盘块 以实体 关系图的
  • Request_获取请求参数通用方式介绍

    1 获取请求参数通用方式 不论get还是post请求方式都可以使用下列方法来获取请求参数 1 String getParameter String name 根据参数名称获取参数值 username zs password 123 2 St
  • 除了Midjourney和Stable Diffusion,还有哪些AI模型可以使用

    Midjourney是一款广受设计师和艺术家欢迎的人工智能图像生成器 然而 最近它停止提供免费试用 让许多用户开始寻找替代品 在本文中 我们为您编制了一个2023年可尝试的十大Midjourney替代品列表 我们包括了免费和付费选项 让您可
  • [台服公主链接]修改ROOT检测

    类路径 Project smali jp co cygames androidroot CheckApp smali 原始代码 method public static isRootUser Z locals 7 prologue cons
  • CSS Flex相关属性(自我总结)

    把容器做成flex弹性盒 display flex 容器属性 1 flex direction 项目排列方向 主轴方向 row 左对齐 横向排列 默认 row reverse 右对齐 反转横向排列 column 纵向排列 column re
  • JAVA 计算日期属于当月第几周(日期周计算)

    JAVA 计算日期属于当月第几周 日期周计算 本文周计算时间方式为 当月第一个周一为第一周 计算 获取月第一个周一 从当月第一天开始找 第一个周一时间与 sourceTime 传入时间对比 sourceTime在第一个周一时间之前 表示属于
  • Twitter开发者账号及开发者APPs的创建 2019.05

    转自 https towardsdatascience com access data from twitter api using r and or python b8ac342d3efe Access Data from Twitter
  • screen / nohup 实现后台运行程序

    通常我们在运行程序时 会通过终端登录服务器 然后使用shell命令运行程序 这种方式对于运行时长较短的程序没问题 但是对于深度学习中训练网络等耗时较长的程序来说很容易出问题 例如一旦机器死机 断网 不小心关闭终端等种种情况都会导致程序终止运
  • JSP中include指令的功能简介说明

    转自 JSP中include指令起什么用呢 下文讲述JSP中include指令的功能简介说明 如下所示 JSP中include指令的功能说明 用于将不同的文件插入到当前JSP页面的指定位置 JSP指令的语法 相关说明 include指令 用
  • 现代大学英语精读第二版(第四册)学习笔记(原文及全文翻译)——1A - Thinking as a Hobby(把思考作为爱好)

    Unit 1A Thinking as a Hobby Thinking as a Hobby William Golding While I was still a boy I came to the conclusion that th
  • @RefreshScope详解

    要说清楚RefreshScope 先要了解Scope Scope org springframework beans factory config Scope 是Spring 2 0开始就有的核心的概念 RefreshScope org s
  • React 性能优化

    React 的工作流程是什么 我们可以在哪些阶段进行性能优化呢 如果 React 项目中出现了卡顿 我们可以采用哪些性能优化技巧 如何通过 React Profiler 定位性能问题 React Profiler 包含哪些阶段的信息 大纲
  • 信息熵、条件熵、信息增益率

    1 1 数学分布 分布可能指代不同的东西 比如数据分布或概率分布 这两种分布其实没有本质的区别 可以将x看做随机点 某一数据分布P为目标分布 概率分布f为x落在P上的概率值 形式化表示为f x 假设我们是一组正在广袤无垠的太空中进行研究的科
  • imx6 reboot指令无法重启 & kernel 停留在start kernel ......

    reboot指令无法重启 log root imx6dlsabresd reboot Thesystem is going down for reboot NOW d ttymxc0 Tue Oct 11 06 41 03 2016 INI