uboot开发笔记一之ralink mt7620编译

uboot开发笔记一之ralink mt7620编译


参考:

1.MTK_Ralink_ApSoC_SDK_4200_20131106.tar.bz2,这个ralink的sdk网上有,自行搜索;

MTK_Ralink_ApSoC_SDK_4200_20131106/Uboot

MTK_Ralink_ApSoC_SDK_4200_20131106/RT288x_SDK/toolchain/buildroot-gcc463/usr/bin

2.ASUS wireless router  rt-n14u  or rt-n56u GPL source :GPL_RT_N14U_30043784850.zip;GPL_RT_N56U_30043786065.zip;

GPL_RT_N14U_30043784850/src-ra-mt7620/uboot_mt7620

GPL_RT_N14U_30043784850/asuswrt/tools/buildroot-gcc342/bin


u-boot for mt7620 with uip 代码

https://github.com/cleanwrt/u-boot_mt7620


编译步骤: MTK_Ralink_ApSoC_SDK
export PATH=$PATH:~/MTK_Ralink_ApSoC_SDK_4200_20131106/RT288x_SDK/toolchain/buildroot-gcc463/usr/bin
make distclean
make menuconfig ---根据mt7620板子进行选择,生成.config文件,或者直接使用附录的.config文件
make CROSS_COMPILE=mipsel-linux-

编译步骤:ASUS wireless router  rt-n14u
export PATH=$PATH:~/asuswrt/tools/buildroot-gcc342/bin
cp config_14u .config 
or 
make menuconfig---根据mt7620板子进行选择,生成.config文件,或者直接使用附录的.config文件
make CROSS_COMPILE=mipsel-linux-

编译说明:
1.需要使用 MTK_Ralink_ApSoC_SDK_4200_20131106里面的交叉编译工具链MTK_Ralink_ApSoC_SDK_4200_20131106/RT288x_SDK/toolchain/buildroot-xxx/usr/bin,使用openwrt最新的工具链,编译失败;
2.这份uboot代码在中文linux操作系统下,有下面这个bug: ./tools/mkimage: invalid entry point -n
./tools/mkimage -A mips -T standalone -C none \
-a 0x80200000 -e \
-n "SPI Flash Image" \
-r DDR -s 16 -t 64 -u 32 \
-y 0xFF -z 0xFF -w 0xFF -d uboot.bin uboot.img
./tools/mkimage: invalid entry point -n
Makefile:256: recipe for target 'uboot.img' failed
make: *** [uboot.img] Error 1
Makefile
# -a $(TEXT_BASE) -e $(shell readelf -h u-boot | grep "Entry" | awk '{print $$4}') \
--->
-a $(TEXT_BASE) -e $(shell LANG=en_US readelf -h u-boot | grep "Entry" | awk '{print $$4}')
or
-a $(TEXT_BASE) -e $(shell readelf -h u-boot | grep "0x80200000" | awk '{print $$2}') \
在生成镜像的最后一步报告"invalid entry point -n"错误
报告错误部分的源代码位于mkimage.c,相关程序如下所示(看样子是参数错误),
后来我将*argv全部打印出来发现:在ubuntu12.04下,Makefile文件中执行的语句展开后是
mkimage -A mips -O linux -T kernel -C lzma -a 80000000 -e 0x8000c310 -n "Linux Kernel Image" -d /home/usrname/Documents/RT288x_SDK/source/images/zImage.lzma /home/usrname/Documents/RT288x_SDK/source/images/usrname_uImage
argc的值是18,第12个参数“-e”后面紧接着的是代表入口地址的16进制参数;
但是在ubuntu14.04下,Makefile文件中执行的语句展开后是
mkimage -A mips -O linux -T kernel -C lzma -a 80000000 -e -n "Linux Kernel Image" -d /home/usrname/Documents/RT288x_SDK/source/images/zImage.lzma /home/usrname/Documents/RT288x_SDK/source/images/usrname_uImage
argc的值是17,正是“-e”参数后缺少了入口地址参数,而紧接着“-n”。所以程序就报告了“ nvalid entry point -n”,但是为何会缺少一个参数?
答案就在Makefile里面找。Makefile中通过$(shell readelf -h $(ROOTDIR)/$(LINUXDIR)/vmlinux | grep "Entry" | awk '{print $$4}') 查找入口点地址,但是我们在ubuntu14.04中readelf文件vmlinux才发现Entry竟然被汉化成了“入口点地址”,所以grep Entry肯定找不到啦。最后把“Entry”改成“入口点地址”,再把$$4改成$$2就可以完成编译了。
u-boot_mt7620$ readelf -h u-boot
ELF 头:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (可执行文件)
Machine: MIPS R3000
Version: 0x1
入口点地址: 0x80200000
程序头起点: 52 (bytes into file)
Start of section headers: 508308 (bytes into file)
标志: 0x50000005, noreorder, cpic, mips32
本头的大小: 52 (字节)
程序头大小: 32 (字节)
Number of program headers: 2
节头大小: 40 (字节)
节头数量: 25
字符串表索引节头: 22
mt7620uboot_asuswrt$ LANG=en_US readelf -h u-boot
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
Entry point address: 0x80200000
Start of program headers: 52 (bytes into file)
Start of section headers: 414864 (bytes into file)
Flags: 0x50000005, noreorder, cpic, mips32
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 2
Size of section headers: 40 (bytes)
Number of section headers: 25
Section header string table index: 22
这种问题着实让人哭笑不得,看来做开发的系统最好还是别汉化。开发中出现疑难异常问题的时候也可以从系统的语言环境考虑下。

附 mt7620的uboot的.config文件

$ cat .config 
#
# Automatically generated by make menuconfig: don't edit
#
CONFIG_CROSS_COMPILER_PATH="/opt/buildroot-gcc342/bin"
ASIC_BOARD=y
# RT2880_ASIC_BOARD is not set
# RT3350_ASIC_BOARD is not set
# RT3052_ASIC_BOARD is not set
# RT3352_ASIC_BOARD is not set
# RT3883_ASIC_BOARD is not set
# RT5350_ASIC_BOARD is not set
# RT6855A_ASIC_BOARD is not set
MT7620_ASIC_BOARD=y
MT7620_MP=y
P5_MAC_TO_NONE_MODE=y
# P5_MAC_TO_PHY_MODE is not set
# P5_RGMII_TO_MAC_MODE is not set
# P5_MII_TO_MAC_MODE is not set
# P5_RMII_TO_MAC_MODE is not set
P4_MAC_TO_NONE_MODE=y
# P4_MAC_TO_PHY_MODE is not set
# P4_RGMII_TO_MAC_MODE is not set
# P4_MII_TO_MAC_MODE is not set
# P4_RMII_TO_MAC_MODE is not set
# ON_BOARD_NAND_FLASH_COMPONENT is not set
ON_BOARD_SPI_FLASH_COMPONENT=y
# ON_BOARD_SDR is not set
# ON_BOARD_DDR1 is not set
ON_BOARD_DDR2=y
# ON_BOARD_256M_DRAM_COMPONENT is not set
ON_BOARD_512M_DRAM_COMPONENT=y
# ON_BOARD_1024M_DRAM_COMPONENT is not set
# ON_BOARD_2048M_DRAM_COMPONENT is not set
# ON_BOARD_DDR_WIDTH_8 is not set
ON_BOARD_DDR_WIDTH_16=y
ON_BOARD_16BIT_DRAM_BUS=y
PDMA_NEW=y
RX_SCATTER_GATTER_DMA=y
UBOOT_RAM=y
# UBOOT_ROM is not set
# DUAL_IMAGE_SUPPORT is not set
# LAN_WAN_PARTITION is not set
TEXT_BASE=0x80200000


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值