Linux4.14的设备树下已经对itop4412做了支持,本来应该很容易进行移植,可是在使用讯为给的资料中,对exynos4412-itop-scp-core.dtsi中原本的代码全部进行了注释,并自己添加了部分节点。导致我移植完成后cpu只有一个核心在工作。

于是重新到linux官网下载源码得到exynos4412-itop-scp-core.dtsi文件,编译烧写后发现卡在

  Starting kernel ...

  Uncompressing Linux... done, booting the kernel.

经过网上搜索发现是无法解析firmware节点导致,于是把这段代码注释掉

  firmware@0203F000 {
  compatible = "samsung,secure-firmware";
  reg = <0x0203F000 0x1000>;
  };

重点来了,注释掉上段代码后,可以正常启动linux,可就是挂载不上根文件系统,往上翻log显示:

  [ 2.504695] mmcblk1: error -5 sending status command, retrying

  ...

  [ 3.024971] dwmmc_exynos 12550000.mmc: Busy; trying anyway
  [ 3.528986] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg 0x0 status 0x80202000)
  [ 3.562416] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz, actual 396825HZ div = 63)

  (我把根文件系统放在emmc中,在uboot中emmc为mmc0,可是被linux识别成emmc1,所以root=/dev/mmcblk1p2,暂时没搞清楚怎么更改)

从log可以看出是与emmc通讯受阻,因为在用讯为给的exynos4412-itop-scp-core.dtsi文件是可以正常使用emmc的,所以查看设备树的emmc节点  

首先是exynos4412.dtsi:

  329 mshc_0: mmc@12550000 {
  330 compatible = "samsung,exynos4412-dw-mshc";
  331 reg = <0x12550000 0x1000>;
  332 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
  333 #address-cells = <1>;
  334 #size-cells = <0>;
  335 fifo-depth = <0x80>;
  336 clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;
  337 clock-names = "biu", "ciu";
  338 status = "disable";
  339 };

exynos4412-itop-scp-core.dtsi:

  &mshc_0 {

    pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
    pinctrl-names = "default";
    status = "okay";
    vmmc-supply = <&buck9_reg>;
    broken-cd;
    card-detect-delay = <200>;
    samsung,dw-mshc-ciu-div = <3>;
    samsung,dw-mshc-sdr-timing = <2 3>;
    samsung,dw-mshc-ddr-timing = <1 2>;
    bus-width = <8>;
    cap-mmc-highspeed;
  };

上面都是在官方linux下的设备树中的片段,而讯为做出以下改动

exynos4412-itop-scp-core.dtsi:  

  mshc_0: mmc@12550000 {
    compatible = "samsung,exynos4412-dw-mshc";
    reg = <0x12550000 0x1000>;
    interrupts = <0 77 0>;
    #address-cells = <1>;
    #size-cells = <0>;
    fifo-depth = <0x80>;
    clocks = <&clock CLK_SDMMC4>, <&clock CLK_SCLK_MMC4>;
    clock-names = "biu", "ciu";
    status = "disabled";
   };

讯为无论是在dts还是dtsi中都没有描述vmmc-supply = <&buck9_reg>;这个节点,而查看S5M8767A的原理图

可以看到刚启动的时候,BUCK9是OFF状态也就是没有电压,接下来看emmc的原理图

原理图明确标出emmc的供电就是VDDF28_EMMC,这就是问题所在,在uboot中我也用到了emmc,而这时pmu根本没有初始化,也就是说如果原理图正确的话emmc在uboot是不能工作的。所以结论就是讯为给的原理图居然是错误的,导致官方的设备树文件emmc的供电部分给出了vmmc-supply = <&buck9_reg>,经过我的查找确定了emmc的供电为VDDIOAP_MMC012_28,就是最下面这个,这个供电默认状态是开启的。

于是修改vmmc-supply = <&buck9_reg>为vmmc-supply = <&ldo17_reg>,编译后正常启动并可以挂载根文件系统,也有四颗核心在工作了。

[ 0.002640] CPU: Testing write buffer coherency: ok
[ 0.003759] CPU0: thread -1, cpu 0, socket 10, mpidr 80000a00
[ 0.040055] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.060012] Hierarchical SRCU implementation.
[ 0.119998] smp: Bringing up secondary CPUs ...
[ 0.200218] CPU1: thread -1, cpu 1, socket 10, mpidr 80000a01
[ 0.280091] CPU2: thread -1, cpu 2, socket 10, mpidr 80000a02
[ 0.360092] CPU3: thread -1, cpu 3, socket 10, mpidr 80000a03
[ 0.360292] smp: Brought up 1 node, 4 CPUs
[ 0.360319] SMP: Total of 4 processors activated (192.00 BogoMIPS).

...

[    2.528840] VFS: Mounted root (ext4 filesystem) on device 179:2.

...

十一放假,解决这个问题排查了好长时间,在这不得不吐槽讯为,原理图都是错的,照着官方的设备树居然改不好自己的设备树,这个方案估计是照着哪里抄的的吧,抄就抄了,你把原理图搞对好吧。录的视频和没有一样,毫无技术含量可言。

  

  

  

在itop4412移植linux4.14和设备树遇到的问题及解决的更多相关文章

  1. 移植linux4.14内核到四核Exynos4412开发板

    最近法师收到了很多留言,其中有一部分问法师什么时候更新,还有一大部分问法师我是买迅为的IMX6UL精英版好呢还是买4412精英版好呢,因为我们这俩个都不贵.法师的建议的是入手4412!为什么呢? 第一 ...

  2. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  3. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  4. 基于设备树的TQ2440触摸屏驱动移植

    平台 开发板:tq2440 内核:Linux-4.9 u-boot:u-boot-2015.04   概述 之前移植了LCD驱动,下面继续移植触摸屏驱动,然后将tslib也移植上去. 正文 一.移植触 ...

  5. tiny4412学习(四)之移植linux-设备树(1)设备树基础知识及GPIO中断【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74177978 版权声明:本文为博主原创文章,转载请注明http://blog.c ...

  6. linux设备驱动程序-i2c(2)-adapter和设备树的解析

    linux设备驱动程序-i2c(2)-adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲 ...

  7. Linux设备树语法详解

    概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写.引入了设备树之后,驱动代 ...

  8. Linux设备树语法详解【转】

    转自:http://www.cnblogs.com/xiaojiang1025/p/6131381.html 概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离.在设备 ...

  9. 设备树(device tree)学习笔记

    作者信息 作者:彭东林 邮箱:pengdonglin137@163.com 1.反编译设备树 在设备树学习的时候,如果可以看到最终生成的设备树的内容,对于我们学习设备树以及分析问题有很大帮助.这里我们 ...

随机推荐

  1. asp.net core web的导入导出excel功能

    这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core ...

  2. Jenkins首次进入的一些设置及配置

    1.将Jenkins显示页面修改为中文环境 首先安装中文的插件:在manage Jenkins-Manage Plugins-可选插件 下载完成之后,在系统设置里边,修改为中文格式:manage Je ...

  3. 一. jmeter

    1.性能测试概述 1.1 主要方向是测试系统在一定负荷压力下,系统的响应时间,吞吐量,稳定性,系统的可扩展性等性能指标. 结合应用的架构和实现细节找出问题,并最终确认问题得到解决的过程. 目的: 1. ...

  4. 使用基础知识完成java小作业?强化练习-1.输入数组计算最大值-2.输出数组反向打印-3.求数组平均值与总和-4.键盘输两int,并求总和-5.键盘输三个int,并求最值;

    完成几个小代码练习?让自己更加强大?学习新知识回顾一下基础? 1.输入数组计算最大值 2.输出数组反向打印 3.求数组平均值与总和 4.键盘输两int,并求总和 5.键盘输三个int,并求最值 /* ...

  5. 【转载】C#中SqlConnection类的作用以及常用方法

    在C#的数据库编程中,SqlConnection类主要用于连接Sqlserver数据库,使用SqlConnection类的实例方法我们可以打开Sqlserver数据库连接以及获取数据完毕后关闭数据库连 ...

  6. jQuery常用方法(五)

    一.jQuery中常用方法相关方法参数说明:a.无参,获取值b.参数param,设置值c.参数function(index,oldVal){}回调函数[返回我们所要使用的新值]    回调函数的两个参 ...

  7. vue的v-bind详解

    前言 v-bind 主要用于属性绑定,比方你的class属性,style属性,value属性,href属性等等,只要是属性,就可以用v-bind指令进行绑定.这篇文章主要介绍了VueJs中的V-bin ...

  8. mongoDB看这篇就够了

    写在前面 hello,小伙伴们,我是 pubdreamcc ,本篇文章依旧出至于我的 GitHub仓库 node学习教程 ,如果你觉得我写的还不错,欢迎给个 star ,小伙伴们的 star 是我持续 ...

  9. Windows 10 下 GCC / LLVM 的安装和使用

    win10下gcc的安装和makehttps://www.jianshu.com/p/46824c62dfed 方案1:直接官方下载安装minGw或Cygwininstall download: ht ...

  10. 创建简易的SpringBoot项目

    创建简易的SpringBoot项目 这两天在学习springboot,菜鸟刚刚知道这个东西,看着springboot项目下那一大堆目录都不知道从何下手,还是静下心来从最简单的创建一个项目入手,这路和大 ...