开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位

工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi

要移植的u-boot版本:u-boot-2016-11

Tiny4412开发板硬件版本为  

底板:  Tiny4412SDK 1312B  

核心板:Tiny4412 - 1306

----------------------------------------------------------------------------------------------------------------------------------------------

 经过两天的调试,终于发现上一节ext2文件格式的问题,其实是SD卡驱动有问题,在/arch/arm/dts/exynos4412-tiny4412.dts下

diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny
index 36e2c6a..88c336a
--- a/arch/arm/dts/exynos4412-tiny4412.dts
+++ b/arch/arm/dts/exynos4412-tiny4412.dts @@ -, +, @@
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
status = "disable";
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
status = "disable";
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
samsung,bus-width = <>;
samsung,timing = < >;
cd-gpios = <&gpk2 >;
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
status = "disable";
}; @@ -, +, @@
compatible = "samsung,emmc-reset";
reset-gpio = <&gpk1 >;
};
+
};
status = "disable";
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
status = "disable";
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
samsung,bus-width = <>;
samsung,timing = < >;
cd-gpios = <&gpk2 >;
}; sdhci@ {
- compatible = "samsung,exynos4412-sdhci";
status = "disable";
};

  原因就在于设备树的compatible信息,compatible属性中的字符和操作系统选择什么样的驱动来初始化设备有关,网上查到的信息如下:compatible属性,该属性的值是string list,定义了一系列的modle(每个string是一个model)。这些字符串列表被操作系统用来选择用哪一个driver来驱动该设备。假设定义该属性:compatible = “aaaaaa”, “bbbbb”。那么操作操作系统可能首先使用aaaaaa来匹配适合的driver,如果没有匹配到,那么使用字符串bbbbb来继续寻找适合的driver。在/drives/mmc/s5p_sdhci.c。设备定义的信息为samsung,exynos4412-sdhci,但不知为何设备数中加上这句后,就找不到该驱动。

修改后

修改环境变量:

setenv bootcmd "load mmc 0 0x40007000 uImage; load mmc 0 0x48000000 ramdisk.img; load mmc 0 0x42000000 exynos4412-tiny4412.dtb; bootm 0x40007000 0x48000000 0x42000000"

boot启动:

注意,在第一次修改驱动相关代码后,会出现如下情况

解决方法为:

diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c
index 3d31f9d..a8fc72a
--- a/arch/arm/mach-exynos/clock.c
+++ b/arch/arm/mach-exynos/clock.c
@@ -, +, @@ unsigned long get_mmc_clk(int dev_index)
void set_mmc_clk(int dev_index, unsigned int div)
{
/* If want to set correct value, it needs to substract one from div.*/
- if (div > )
- div -= ;
+// if (div > 0)
+// div -= 1; if (cpu_is_exynos5()) {
if (proid_is_exynos5420() || proid_is_exynos5422())

具体原因未知,据说4G卡不会出现此情况;;

参考:

https://www.cnblogs.com/LoTGu/p/6405131.html

https://blog.csdn.net/u013779722/article/details/60311216

tiny4412 --Uboot移植(6) SD卡驱动,启动内核的更多相关文章

  1. X-009 FriendlyARM tiny4412 uboot移植之SD Card用起来Kernel boot起来

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  2. tiny4412 --Uboot移植(5) DDR3内存

    开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位 工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-g ...

  3. sd卡无法启动及zc706更改主频后可以进入uboot无法启动kernel的坑

    好长的标题 +_+ 1.sd卡无法启动 起因:kernel底下通过dd测试速度,擦写了sd卡,再启动时发现无法启动 于是重新格式化,再将BOOT.bin 相关dtb u-rootfs zImage和u ...

  4. X-008 FriendlyARM tiny4412 uboot移植之copy u-boot到DDR内存

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  5. X-007 FriendlyARM tiny4412 u-boot移植之内存初始化

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  6. X-004 FriendlyARM tiny4412 uboot移植之点亮指路灯

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  7. u-boot 移植 --->6、引导Linux启动测试

    在引导Linux开机之前需要先清楚Linux启动的必要或者说是先决条件,这里就是提到了u-boot的作用了引用百度云---主要用于嵌入式系统的引导加载,其实在我调试下来总结一下就是初始化硬件这里的硬件 ...

  8. X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件

    X-003 FriendlyARM tiny4412 uboot移植之添加相应目录文件 <<<<<<<<<<<<<< ...

  9. 使用FreeRTOS在SD卡驱动使用非系统延时导致上电重启不工作的情况

    一.问题描述在一个使用FreeRTOS的工程中,只做了SD卡的驱动,由于RTOS使用了Systick,故非系统延时函数使用的是 DWT中的时钟周期(CYCCNT)计数功能,但是在SD卡驱动中使用了这个 ...

随机推荐

  1. React基础概念

    Hello Wrold ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') ); ...

  2. python-web自动化-Js-滚动条操作

    滚动条操作:当待操作的元素在页面可是区域外时,要将待操作的元素滚动到可视区域当中 步骤:1.先找要将要操作的元素element = driver.find_element_by_xxxx(" ...

  3. Sharding-jdbc视频:当Sharding-jdbc遇到Spring Boot

    一.什么是Sharding-jdbc? 在介绍Sharding-JDBC之前,我们需要先说明下Sharding-Sphere. Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成 ...

  4. all-document

    1.memorymanagement-whitepaper J2SE5.0 JVM 垃圾回收器相关英文 链接: https://pan.baidu.com/s/1mzkMxuFE82sfeVOToMb ...

  5. 【C语言基础】循环体系

    1.For循环结构: For循环的一般形式为: for (表达式1 初始化:判断条件:自增自减) { 语句块 } 2.while循环结构: while循环的一般的形式为: 表达式1 初始化 while ...

  6. LeetCode 141. Linked List Cycle 判断链表是否有环 C++/Java

    Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linked lis ...

  7. DO,DTO和VO的使用

    DO,DTO和VO的使用 DO:对应数据库表结构 VO:一般用于前端展示使用 DTO:用于数据传递.(接口入参和接口返回值都可以) 以ssm框架为例: controller层: public List ...

  8. Mac系统如何显示隐藏文件?

    显示全部文件 defaults write com.apple.finder AppleShowAllFiles -bool true osascript -e 'tell application & ...

  9. UICollectionView didSelectItemAtIndexPath实现方法

    didSelectItemAtIndexPath是通过UIResponder的四个touch方法实现的(touchBegan, touchMove, touchEnd, touchCancel),因此 ...

  10. spring三大核心

    IOC(控制反转) 下面是多个针对此理解的表达. 一个对象A依赖另一个对象B就要自己去new 这是高度耦合的 IOC容器的使用. 比如在B中使用A很多,哪一天A大量更改,那么B中就要修改好多代码. 通 ...