移植新版本u-boot之七---易用性修改裁剪以及制作补丁

先给自己打个广告,本人的微信公众号正式上线了,搜索:张笑生的地盘,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题
在这里插入图片描述
再次介绍一下,本系列文章的主要目的是记录下在学习《韦东山嵌入式教学视频》的课程笔记,掌握一门新的技术要从会使用和操作它开始,本系列没有深入去分析uboot的框架以及源码,后期想再开一个博客,仔细分析uboot的框架和源码

  1. 裁剪,默认的uboot包含的功能太多,但是我们又不需要,可以注释掉下面的宏定义,仍然在smdk2440.h中
	//#define CONFIG_USB_OHCI
    //#define CONFIG_USB_KEYBOARD
    //#define CONFIG_USB_STORAGE
    //#define CONFIG_DOS_PARTITION
    //#define CONFIG_CMD_DATE
    //#define CONFIG_CMD_DHCP
    #if 0
    #define CONFIG_CMD_FAT
    #define CONFIG_CMD_EXT2
    #define CONFIG_CMD_UBI
    #define CONFIG_CMD_UBIFS
    #define CONFIG_CMD_MTDPARTS
    #define CONFIG_MTD_DEVICE
    #define CONFIG_MTD_PARTITIONS
    #define CONFIG_YAFFS2
    #define CONFIG_RBTREE
    #endif
  1. uboot启动的时候,会读取一些环境变量,包括本机ip地址,server ip地址
    内核打印出来的分区信息,那么我们该如何初始化设置呢
    在smdk2440.h中定义
	#define CONFIG_BOOTARGS     "console=ttySAC0 root=/dev/mtdblock3"
    #define CONFIG_BOOTCOMMAND  "nand read 30000000 kernel;bootm 30000000"
    #define CONFIG_NETMASK		255.255.255.0
    #define CONFIG_IPADDR		192.168.0.17
    #define CONFIG_SERVERIP		192.168.0.106
    #define CONFIG_ETHADDR      00:0c:29:4d:64:f6
  1. 上面的环境变量保存在哪里呢?这个需要根据我们的实际规划以及硬件分配来决定,比如在韦老师的jz2440板子上,我们可以保存在板子上的nand flash中,定义宏如下
	#if 0   /* 以下定义是将环境变量保存在nor中 */
    #define CONFIG_ENV_ADDR			(CONFIG_SYS_FLASH_BASE + 0x070000)
    #define CONFIG_ENV_IS_IN_FLASH
    #define CONFIG_ENV_SIZE			0x10000
    /* allow to overwrite serial and ethaddr */
    #define CONFIG_ENV_OVERWRITE
    #else   /* 以下定义是将环境变量保存在nand中 */
    #define CONFIG_ENV_IS_IN_NAND
    #define CONFIG_ENV_OFFSET         0x40000
    #define CONFIG_ENV_SIZE           0x20000
    #define CONFIG_ENV_RANGE          CONFIG_ENV_SIZE      
    #endif
  1. 编译并烧写到板子
	tftp 30000000 u-boot.bin
    protect off all
    erase 0 3ffff
    cp.b 30000000 0 40000
    reset
  1. 重启之后,发现还是有警告打印,这是因为环境变量没有保存到nand中,输入如下命令
save
  1. 支持mtdparts命令,在smdk2440.h中定义如下
	#define CONFIG_CMD_MTDPARTS
    #define CONFIG_MTD_DEVICE
    #define MTDIDS_DEFAULT		"nand0=jz2440-0"     /* 哪一个设备 */
    #define MTDPARTS_DEFAULT	"mtdparts=jz2440-0:256k(u-boot),"	\
                            "128k(params),"		\
                            "2m(kernel),"	\
                            "-(rootfs)"		\
  1. 在board.c/board_init_r函数中,增加如下语句
run_command("mtdparts default", 0);
  1. 烧写文件系统,烧写jffs2文件系统
   tftp 30000000 fs_mini_mdev.jffs2
   nand erase.part rootfs
   nand write.jffs2 30000000 0x00260000 5b89a8
   set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2
   boot
  1. 制作补丁
    因为uboot的源码,我们可以在网上下载到,但是我们如何将这个uboot移植到我们的板子上使用呢,我们可以发布patch的方式,按照如下步骤:
   a. 完成功能调试之后,在当前目录下执行 make distclean
   b. 删除多余文件 rm -rf u-boot.dis
   c. 切换到上一级目录,cd ..
   d. 修改文件夹名称  mv u-boot-2012.04.01 u-boot-2012.04.01_100ask
   e. 解压以前的压缩包 tar xjf u-boot-2012.04.01.tar.bz2 
   f. 对比两个文件夹,并生成补丁
      diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask_zj.patch
  1. 制作好的补丁patch应该怎么使用呢
    a. 解压uboot源码tar xjf u-boot-1.1.6.tar.bz2
    b. 切换到解压好的路劲下
    c. 打补丁 patch -p1 < ../ u-boot-1.1.6_jz2440.patch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值