在u-boot命令行执行mtaparts命令

mini2440 :> mtdparts

device nand0 <smdk2440-0>, # parts = 4
#: name                    size                         offset        mask_flags
0: bootloader           0x00040000      0x00000000       0            // 256K
1: params                0x00020000      0x00040000       0            // 128K
2: kernel                  0x00200000      0x00060000       0            //  2M
3: rootfs                   0x0fda0000       0x00260000       0            //  -

当使用高版本kernel或者BootLoader时发现编译出来的bin文件都很大, 加上设备树的支持, 现在重新规划分区

#: name                    size                         offset        mask_flags
0: bootloader           0x00080000      0x00000000       0      // 512K

1: device_tree          0x00010000     0x00080000       0      // 64K
1: params                0x00010000      0x00090000       0      // 64K
2: kernel                  0x00500000      0x000a0000       0      // 5M
3: rootfs                   0x0fda0000       0x0085a0000       0      // -

需要修改的内容:

(1)文件系统分区

#define CONFIG_BOOTARGS    "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0" ->    // rootfs分区offset变成了4
#define CONFIG_BOOTARGS    "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200"

(2)启动参数

原来启动执行bootm kernel

现在变成  bootm 0x30007FC0 - 0x32000000

其中0x30007FC0 是内核地址, 0x32000000   是设备树加载地址

#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0" ->    //

#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30007FC0 kernel; nand read.jffs2 32000000 device_tree; bootm 0x30007FC0 - 0x32000000"

(3)环境变量offset由0x40000 变成0xa0000

#define CFG_ENV_OFFSET      0x40000 ->

#define CFG_ENV_OFFSET      0xa0000

(4)MTDPARTS_DEFAULT

#define MTDPARTS_DEFAULT     "mtdparts=nandflash0:256k@0(bootloader)," \"128k(params)," \"2m(kernel)," \"-(root)"

变成

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:512k@0(bootloader)," \"64k(device_tree)," \"64k(params)," \"5m(kernel)," \"-(root)"

最后一点:u-boot怎么把device_tree传递给kernel呢?

由r2寄存器

内核启动时:

theKernel (0, bd->bi_arch_number, bd->bi_boot_params);

theKernel = (void (*)(int, int, uint))30008000);

三个参数分别是r0,  r1, r2

原来这三个参数分别是

/*
* mov r0, #0
* ldr r1, =362       // machine-id
* ldr r2, =0x30000100
* mov pc, #0x30008000
*/

根据启动参数bootm 0x30007FC0 - 0x32000000

判断获取最后一个参数传递给r2,即可

在do_bootm_linux函数最后添加如下代码:

if (argc == 4) {of_flat_tree = (char *) simple_strtoul(argv[3], NULL, 16);if  (be32_to_cpu(*(ulong *)of_flat_tree) == OF_DT_HEADER) {printf ("\nStarting kernel with device tree at 0x%x...\n\n", of_flat_tree);cleanup_before_linux ();            theKernel (0, bd->bi_arch_number, of_flat_tree);} else {printf("Bad magic of device tree at 0x%x!\n\n", of_flat_tree);}}

添加头文件

#include <ft_build.h>

转载于:https://www.cnblogs.com/hulig7/p/9909416.html

u-boot-1.1.6 设置新分区支持设备树相关推荐

  1. android更新新应用_如何将应用转移到新的Android设备

    android更新新应用 Ben Stockton 本·斯托克顿 A new Android device means transferring all of your content, includ ...

  2. Ubuntu下添加新分区并设置挂载点

    Ubuntu下添加新分区并设置挂载点 最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小,这 ...

  3. linux新建挂载目录命令,告诉你Ubuntu添加新分区并设置挂载点的方法及命令

    最近在Ubuntu下做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小,这次我一下提高到了30G, ...

  4. 【批处理DOS-CMD命令-汇总和小结】-磁盘管理和修复、磁盘和分区属性的管理、设置隐藏分区卷(convert、diskpart、chkdsk)

    一.磁盘格式转换命令--convert 打印convert命令的帮助信息 如果想要将c盘从fat转到ntfs,可以执行命令[convert c:/fs:ntfs]. 二.磁盘或分区管理--diskpa ...

  5. 联想y7000p 2019 安装ubuntu20.04 双系统 设置efi分区

    2022/11/20 联想y7000p 2019 安装ubuntu20.04 双系统 设置efi分区 第一次安装ubuntu就出了非常多的错误,问题就出在没有efi分区.我装了三天,本来都要放弃,就用 ...

  6. AndroidQ(10.0) MTK平台添加新分区

    65 平台增加一个新分区,用于保存特殊数据,修改文件列表如下 modified: build/make/core/Makefilemodified: build/make/core/config.mk ...

  7. 计算机里有个不能进入的磁盘分区,新电脑只有一个分区怎么办? 教你们如何不进pe给硬盘创建新分区!...

    很多朋友新电脑刚买回来打开发现明明自己机械硬盘1T或者1T机械加128G固态,但是却只有一个或者两个分区,但是又不会分区 现在教大家如何不用老毛桃大白菜之类的进pe系统里面就能直接创建新分区 1 Wi ...

  8. html5怎么创建列分区,使用分区助手创建新分区

    相信在您见过的电脑上一般都会把磁盘分成:电影.音乐,工具--等盘吧!这样子把磁盘上的内容分门别类存贮起来,条理清晰,便于管理,找起来也容易.那么您想不想再创建一个新的分区,专门用于装同一类的东西呢?例 ...

  9. 计算机只有一块硬盘分区,如果新计算机只有一个分区怎么办?教您如何在不输入pe的情况下为硬盘创建新分区!...

    许多朋友刚买了一台新计算机并打开它,发现他们的机械硬盘1T或1T机械加128G固态硬盘,但是只有一个或两个分区,但是它们不会分区 现在教您如何在不进入pe系统的情况下直接创建新分区,例如旧的毛桃大白菜 ...

最新文章

  1. python json
  2. javaweb里边的重定向与转发的区别
  3. 重构,还是重写?(2020版)
  4. python标准库和第三方库_python常用标准库及三方库
  5. 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
  6. shell编程之简单四则运算及数组定义
  7. iOS网络请求安全认证(JWT,RSA)
  8. java过滤器如何操作数据库_jsp – 使用Java中的过滤器验证用户名,密码(与数据库联系)...
  9. 安卓系统双屏异显_Android实现双屏异显
  10. GitHub开源项目:用于构建接入网络和模块化网络服务的平台
  11. Rust笔记1 rust基本概念
  12. 计蒜客---N的-2进制表示
  13. Nmap发现局域网中存活主机
  14. 微擎小程序PHP,微擎配置小程序教程
  15. 输入球心三维坐标及球半径求算球体的球面坐标数据(C/C++)
  16. 第52届格莱美大奖完全获奖名单
  17. React-微信网页开发总结
  18. Good Ticket(深搜)
  19. Parallels Desktop | 在 Mac 里装 Windows 的最佳工具。
  20. sqldbx mysql 乱码_sqlDbx连接mysql 及乱码

热门文章

  1. First update-【计算机方面的权威外文数据库(全)】
  2. Java的基础方法Java的对象_java基础之 创建对象的几种方式
  3. 单片机检测stc没反应_STC 核心板 入门记 - 你好我叫郑某人
  4. android wear升级方法,LG G Watch官方工具包刷Android wear5.1.1教程(附刷机包)
  5. mysql world.sql.zip_安装mysql数据库zip版|mysqlzip
  6. 网络推广营销教大家有关移动端网站优化更受用户欢迎的技巧!
  7. 网络营销——网络营销专员浅析网站推广营销关键词是重点
  8. 网站推广——站长助力创业期企业网站优化推广的好选择
  9. 网站推广的三大基本方式
  10. python数据分析numpy_利用python进行数据分析-NumPy高级应用