IMX6平台简单记载U-BOOT移植

之前因为需要在板子上移植uboot和kernel, 过了很久把一些东西记载一下。

1、
修改uboot:
DDR从32位修改成64位

/board/freescale/mx6q_sabreauto/flash_header.S 修改dcd表配置

串口从uart2变换到uart1:

/board/freescale/mx6q_sabreauto/mx6q_sabreauto.c文件中在uart_setup函数里面修改了pinmux的配置

/drivers/serial/serial_mxc.c文件中修改了uart寄存器的base地址,从uart1切换到uart2

/include/configs/mx6q_sabreauto_nand_mfg.h文件中
向内核传递的参数中,修改console。Console从uart2切换到uart1

include/configs/mx6q_sabreauto_nand_mfg.h 文件里面#define CONFIG_BOOTARGS 定义了向内核传递的参数

uboot编译

选择配置文件 比如:make mx6q_sabreauto_nand_mfg_config
选择交叉编译器进行编译:make CROSS_COMPILE=arm-linux-
make clean
make distclean

/lib_arm/bootm.c文件中函数do_bootm_linux函数调用通过getenv函数获取参数,然后调用函数theKernel启动liux内核

=============================================================
2、linux kernel:

1、编译linux之前需要安装交叉编译器。
2、指定自己的交叉编译器,比如CROSS_COMPILE=/home/zero/sdk/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-
3、指定自己的平台,比如export ARCH=arm
Tips
EABI: 嵌入式ABI
嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。
开发者使用自己的汇编语言也可以使用EABI作为与兼容的编译器生成的汇编语言的接口。
支持EABI的编译器创建的目标文件可以和使用类似编译器产生的代码兼容,这样允许开发者链接一个由不同编译器产生的库。
EABI与关于通用计算机的ABI的主要区别是应用程序代码中允许使用特权指令,不需要动态链接(有时是禁止的),和更紧凑的堆栈帧组织用来节省内存。
广泛使用EABI的有Power PC和ARM.

ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)
在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口.

安装交叉编译器的时候,如果是64位的ubuntu,在安装32位交叉编译器后一定要安装lib32z1库!!!!

安装交叉编译器在那个目录下,需要看交叉编译器里面的配置,否则编译的时候找不到,
比如:/opt/fsl-imx-fb/4.1.15-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi 指定咋opt目录下面
使用的时候可以把交叉编译器的目录添加在bash脚本中吗,或者执行下面:
source /opt/fsl-imx-fb/4.1.15-2.0.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
echo $GDB
4、make menuconfig 配置内核

5、make或者make uImage(正常使用这个,生成uImage,需要mkimage 工具)

6、生成的uImage或者zImage在 /arch/arm/boot/目录下面

uboot启动完成后,进入内核, /arch/arm/boot/compressed/head.S执行。然后bl decompress_kernel 跳转到C语言函数decompress_kernel中解压内核。

tips:
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。
那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。
如何生成uImage文件?首先在uboot的/tools目录下寻找mkimage文件,把其copy到系统/usr/local/bin目录下,这样就完成制作工具。然后在内核目录下运行make uImage,如果成功,
便可以在arch/arm/boot/目录下发现uImage文件,其大小比zImage多64个字节。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值