PowerPC平台 u-boot 移植

PowerPC功能很强的通信处理器,支持1000M以太网接口,以Freescale的P1010处理器为开发平台,讲述移植linux的整个过程,与大家分享。

1.配置交叉编译链

网上下载交叉编译工具,配置环境变量

sudo gedit /etc/environment

在末尾添加交叉编译链路径

:/home/freescale/work/tools/freescale/bin

log out(不需要重启),输入如下,验证交叉编译是否安装成功:

freescale@freescale-sdk:~/work/u-boot$ powerpc-linux-gnu-gcc -v

Using built-in specs.

COLLECT_GCC=powerpc-linux-gnu-gcc

........

gcc version 4.5.1 (Sourcery G++ Lite 2010.09-55)

freescale@freescale-sdk:~/work/u-boot$

2.新增单板

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ make distclean

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ cd board/freescale/

freescale@freescale-sdk:~/work/source/u-boot-2010.12/board/freescale$ cp p1010rdb p1010acce -rf

freescale@freescale-sdk:~/work/source/u-boot-2010.12/board/freescale$ cd ../..

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ cd include/configs/

freescale@freescale-sdk:~/work/source/u-boot-2010.12/include/configs$ cp P1010RDB.h P1010BOARD.h

freescale@freescale-sdk:~/work/source/u-boot-2010.12/include/configs$ cd ../..

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ vim boards.cfg

add:

P1010BOARD_NOR                powerpc     mpc85xx     p1010acce           freescale      -           P1010BOARD:P1010BOARD

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ make P1010BOARD_NOR_config

Configuring for P1010BOARD_NOR - Board: P1010BOARD, Options: P1010BOARD

freescale@freescale-sdk:~/work/source/u-boot-2010.12$

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ make

Generating include/autoconf.mk

/home/freescale/work/source/u-boot-2010.12/include/asm/config_mpc85xx.h:328:2: error: #error Processor type not defined for this platform

Generating include/autoconf.mk.dep

/home/freescale/work/source/u-boot-2010.12/include/asm/config_mpc85xx.h:328:2: error: #error Processor type not defined for this platform

powerpc-linux-gnu-gcc -DDO_DEPS_ONLY \

-g  -Os   -mrelocatable -ffunction-sections -fdata-sections -fPIC -meabi -D__KERNEL__ -DCONFIG_SYS_TEXT_BASE=0xeff80000 -I/home/freescale/work/source/u-boot-2010.12/include -fno-builtin -ffreestanding -nostdinc -isystem /home/freescale/work/tools/freescale-2010.09/bin/../lib/gcc/powerpc-linux-gnu/4.5.1/include

-pipe  -DCONFIG_PPC -D__powerpc__ -ffixed-r2 -Wa,-me500 -msoft-float -mno-string  -mno-spe -Wall -Wstrict-prototypes -fno-stack-protector   \

-o lib/asm-offsets.s lib/asm-offsets.c -c -S

In file included from /home/freescale/work/source/u-boot-2010.12/include/asm/config.h:25:0,

from /home/freescale/work/source/u-boot-2010.12/include/config.h:6,

from /home/freescale/work/source/u-boot-2010.12/include/common.h:37,

from lib/asm-offsets.c:18:

/home/freescale/work/source/u-boot-2010.12/include/asm/config_mpc85xx.h:328:2: error: #error Processor type not defined for this platform

make: *** [lib/asm-offsets.s] Error 1

freescale@freescale-sdk:~/work/source/u-boot-2010.12$

编译报错,修改如下:

solutions:

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ vim boards.cfg

P1010BOARD_NOR                powerpc     mpc85xx     p1010acce           freescale      -           P1010BOARD:P1010RDB

继续编译,成功生成u-boot.bin

freescale@freescale-sdk:~/work/source/u-boot-2010.12$ make P1010BOARD_NOR

........

.5.1/nof -lgcc -Map u-boot.map -o u-boot

powerpc-linux-gnu-objcopy -O srec u-boot u-boot.srec

powerpc-linux-gnu-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin

freescale@freescale-sdk:~/work/source/u-boot-2010.12$

3.修改配置支持DDR3

烧写上面生成的u-boot.bin(0xfff80000),配置串口 115200 8 n 1,打印如下:

U-Boot 2013.01-dirty (May 18 2015 - 20:04:36)

CPU:   P1010, Version: 1.0, (0x80f10010)

Core:  E500, Version: 5.1, (0x80212151)

Clock Configuration:

CPU0:800  MHz,

CCB:400  MHz,

DDR:200  MHz (400 MT/s data rate) (Synchronous), IFC:100  MHz

L1:    D-cache 32 kB enabled

I-cache 32 kB enabled

Board: P1010RDB

I2C:   ready

SPI:   ready

DRAM:  DDR: failed to read SPD from address 82

SPD error on controller 0! Trying fallback to raw timing calculation

Detected UDIMM Fixed DDR on board

The choosen cas latency 5 is too large

1 GiB (DDR3, 32-bit, CL=5, ECC off)

Flash: 32 MiB

L2:    256 KB enabled

NAND:  16 MiB

MMC:  FSL_SDHC: 0

*** Warning - bad CRC, using default environment

PCIe1: Root Complex of mini PCIe Slot, no link, regs @ 0xffe0a000

PCIe1: Bus 00 - 00

PCIe2: Root Complex of PCIe Slot, no link, regs @ 0xffe09000

PCIe2: Bus 01 - 01

In:    serial

Out:   serial

Err:   serial

Net:   PHY reset timed out

PHY reset timed out

PHY reset timed out

eTSEC1 [PRIME], eTSEC2, eTSEC3

Hit any key to stop autoboot:  0

系统启动不稳定,经常卡死。log打印显示DDR配置失败。DDR: failed to read SPD from address 82

跟踪代码

_start:

bl    cpu_init_early_f

bl    cpu_init_f

init_early_memctl_regs();

bl    board_init_f

Board.c (...\u-boot-2010.12\arch\powerpc\lib)    27583    2015/5/18

for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {

if ((*init_fnc_ptr) () != 0) {

hang ();

}

probecpu,

board_early_init_f,

init_timebase,

env_init,

init_baudrate,

serial_init,

console_init_f,

display_options,

checkcpu,

checkboard,INIT_FUNC_WATCHDOG_RESET

init_func_i2c,

init_func_spi,

INIT_FUNC_WATCHDOG_RESET

init_func_ram,

puts ("DRAM:  ");

initdram (0)

Cpu.c (...\u-boot-2010.12\arch\powerpc\cpu\mpc85xx)    14954    2015/5/18

#if    defined(CONFIG_SPD_EEPROM)    || \

defined(CONFIG_DDR_SPD)        || \

defined(CONFIG_DDR_RAW_TIMING)

dram_size = fsl_ddr_sdram();

#else

dram_size = fixed_sdram();

#endif

比对P1010rdb单板,新建单板没有使用SPD,利用ERROE_ROM存储DDR配置信息,去掉SPD相关宏,修改如下:

P1010BOARD.h

/* DDR Setup */

#define CONFIG_FSL_DDR3

/*#define CONFIG_DDR_RAW_TIMING

#define CONFIG_DDR_SPD

#define CONFIG_SYS_SPD_BUS_NUM        1*/

#define SPD_EEPROM_ADDRESS        0x52

修改Ddr.c (....\u-boot-2010.12\board\freescale\p1010acce)    7474    5/23/2015

ddr_freq = get_ddr_freq(0);

modified to

ddr_freq = 667*1000000;//配置成667MHz

4.编译烧写单板,系统启动正常

U-Boot 2010.12 (May 23 2015 - 13:59:51)

CPU:   P1010, Version: 1.0, (0x80f10010)

Core:  E500, Version: 5.1, (0x80212151)

Clock Configuration:

CPU0:800  MHz,

CCB:400  MHz,

ddr_ratio = 7

DDR:200  MHz (400 MT/s data rate) (Synchronous), IFC:100  MHz

L1:    D-cache 32 kB enabled

I-cache 32 kB enabled

Board: P1010RDB

I2C:   ready

SPI:   ready

DRAM:  Configuring DDR for 667 MT/s data rate

DDR: 1 GiB (DDR3, 32-bit, CL=5, ECC off)

FLASH: 32 MiB

L2:    256 KB enabled

NAND:  NAND device: Manufacturer ID: 0x53, Chip ID: 0x53 (Unknown NAND 16MiB 3,3V 16-bit)

NAND bus width 8 instead 16 bit

No NAND device found!!!

0 MiB

*** Warning - bad CRC, using default environment

PCIe1: Root Complex of mini PCIe Slot, no link, regs @ 0xffe0a000

PCIe1: Bus 00 - 00

PCIe2: Root Complex of PCIe Slot, no link, regs @ 0xffe09000

PCIe2: Bus 01 - 01

In:    serial

Out:   serial

Err:   serial

Net:   PHY reset timed out

PHY reset timed out

PHY reset timed out

eTSEC1 [PRIME], eTSEC2, eTSEC3

Hit any key to stop autoboot:  0

5.修改网卡驱动,支持phy ar8033

(1)根据单板修改phy地址

P1010BOARD.h:

#define TSEC1_PHY_ADDR        1

#define TSEC2_PHY_ADDR        6/*0->6*/

#define TSEC3_PHY_ADDR        4/*2->4*/

增加宏

Miiphyutil.c (...\u-boot\common)    42:

#define MII_DEBUG

编译烧写,调试log如下:

Net:   miiphy_register: added 'eTSEC1', read=0x3ff618d8, write=0x3ff61884

eTSEC1: No support for PHY id ffffffff; assuming generic

miiphy_register: added 'eTSEC2', read=0x3ff618d8, write=0x3ff61884

eTSEC2: No support for PHY id 4dd074; assuming generic

miiphy_register: added 'eTSEC3', read=0x3ff618d8, write=0x3ff61884

eTSEC3: No support for PHY id 4dd074; assuming generic

eTSEC1, eTSEC2, eTSEC3

Hit any key to stop autoboot:  0

=>

u-boot不支持单板的phy,分析phy启动增加phy ar8033支持

(2)分析phy驱动

start.S

bl    board_init_r

puts ("Net:   ");

eth_initialize (bd);

miiphy_init();

board_eth_init

tsec_eth_init(bis, tsec_info, num);

tsec_initialize(bis, &tsecs[i]);

eth_register(dev);

miiphy_register(dev->name, tsec_miiphy_read, tsec_miiphy_write);

debug ("miiphy_register: added '%s', read=0x%08lx, write=0x%08lx\n",

new_dev->name, new_dev->read, new_dev->write);

init_phy(dev);

get_phy_info(dev);

/* loop through all the known PHY types, and find one that */

/* matches the ID we read from the PHY. */

for (i = 0; phy_info[i]; i++) {

if (phy_info[i]->id == (phy_ID >> phy_info[i]->shift)) {

theInfo = phy_info[i];

break;

}

}

Tsec.c (.....\u-boot-2010.12\drivers\net)    57620    2015/5/18

phy_info数组没有支持ar8033,增加phy支持:

add:

struct phy_info phy_info_AR8033 =  {

0x4dd074,

"AR8033",

0,

(struct phy_cmd[]) { /* config */

{PHY_BMCR, PHY_BMCR_RESET, NULL},

{PHY_BMCR, PHY_BMCR_AUTON|PHY_BMCR_RST_NEG, NULL},

{0x1d, 0x05, NULL},

{0x1e, 0x3D47, NULL},

{miim_end,}

},

(struct phy_cmd[]) { /* startup */

{PHY_BMSR, miim_read, NULL},

{PHY_BMSR, miim_read, &mii_parse_sr},

{PHY_BMSR, miim_read, &mii_parse_link},

{miim_end,}

},

(struct phy_cmd[]) { /* shutdown */

{miim_end,}

}

};

static struct phy_info *phy_info[] = {

2060 add:

&phy_info_AR8033,

重新编译,烧写调试:

U-Boot 2010.12 (May 23 2015 - 16:06:42)

CPU:   P1010, Version: 1.0, (0x80f10010)

Core:  E500, Version: 5.1, (0x80212151)

Clock Configuration:

CPU0:800  MHz,

CCB:400  MHz,

DDR:200  MHz (400 MT/s data rate) (Synchronous), IFC:100  MHz

L1:    D-cache 32 kB enabled

I-cache 32 kB enabled

Board: P1010RDB

I2C:   ready

SPI:   ready

DRAM:  Configuring DDR for 667 MT/s data rate

DDR: 1 GiB (DDR3, 32-bit, CL=5, ECC off)

FLASH: 32 MiB

L2:    256 KB enabled

NAND:  NAND device: Manufacturer ID: 0x53, Chip ID: 0x53 (Unknown NAND 16MiB 3,3V 16-bit)

NAND bus width 8 instead 16 bit

No NAND device found!!!

0 MiB

PCIe1: Root Complex of mini PCIe Slot, no link, regs @ 0xffe0a000

PCIe1: Bus 00 - 00

PCIe2: Root Complex of PCIe Slot, no link, regs @ 0xffe09000

PCIe2: Bus 01 - 01

In:    serial

Out:   serial

Err:   serial

Net:   miiphy_register: added 'eTSEC1', read=0x3ff618d0, write=0x3ff6187c

eTSEC1: No support for PHY id ffffffff; assuming generic

miiphy_register: added 'eTSEC2', read=0x3ff618d0, write=0x3ff6187c

eTSEC2: PHY is AR8033 (4dd074)

miiphy_register: added 'eTSEC3', read=0x3ff618d0, write=0x3ff6187c

eTSEC3: PHY is AR8033 (4dd074)

eTSEC1, eTSEC2, eTSEC3

Hit any key to stop autoboot:  0

=>

6.测试如下:

=> setenv ethaddr 00:04:9f:ef:01:01

=> setenv eth1addr 00:04:9f:ef:01:02

=> setenv eth2addr 00:04:9f:ef:01:03

=>

=> setenv ipaddr 192.168.2.21

=> setenv serverip 192.168.2.242

=> setenv netmask 255.255.255.0

=> setenv ethact eTSEC2

=> ping $serverip

Speed: 100, full duplex

Using eTSEC2 device

host 192.168.2.242 is alive

=> saveenv

Saving Environment to Flash...

Un-Protected 1 sectors

Erasing Flash...

. done

Erased 1 sectors

Writing to Flash... 9....8....7....6....5....4....3....2....1....9....8....7....6....5....4....3....2....1....done

Protected 1 sectors

=>setenv ethact eTSEC3

=> ping $serverip

=>setenv ethact eTSEC2

=>ping $serverip

=>setenv ethact eTSEC1

=>ping $serverip

测试eTSEC2 eTSEC3都能ping通

下面测试tftp更新重新,均正常。

=> tftp 0x1000000 u-boot.bin

Speed: 1000, full duplex

Using eTSEC1 device

TFTP from server 192.168.2.242; our IP address is 192.168.2.21

Filename 'u-boot.bin'.

Load address: 0x1000000

Loading: T T T T T T T T T T

Retry count exceeded; starting again

Speed: 100, full duplex

Using eTSEC2 device

TFTP from server 192.168.2.242; our IP address is 192.168.2.21

Filename 'u-boot.bin'.

Load address: 0x1000000

Loading: ####################################

done

Bytes transferred = 524288 (80000 hex)

=> protect off all

Un-Protect Flash Bank # 1

=> erase 0xeff80000 0xefffffff

.... done

Erased 4 sectors

=> cp.b 0x1000000 0xeff80000 0x80000

Copy to Flash... 9....8....7....6....5....4....3....2....1....done

=>

更新完u-boot重新断电重启,系统正常启动,u-boot移植基本实现,下一步移植linux。

U-Boot 2010.12 (May 23 2015 - 17:02:30)

CPU:   P1010, Version: 1.0, (0x80f10010)

Core:  E500, Version: 5.1, (0x80212151)

Clock Configuration:

CPU0:800  MHz,

CCB:400  MHz,

DDR:200  MHz (400 MT/s data rate) (Synchronous), IFC:100  MHz

L1:    D-cache 32 kB enabled

I-cache 32 kB enabled

Board: P1010RDB

I2C:   ready

SPI:   ready

DRAM:  Configuring DDR for 667 MT/s data rate

DDR: 1 GiB (DDR3, 32-bit, CL=5, ECC off)

FLASH: 32 MiB

L2:    256 KB enabled

NAND:  NAND device: Manufacturer ID: 0x53, Chip ID: 0x53 (Unknown NAND 16MiB 3,3V 16-bit)

NAND bus width 8 instead 16 bit

No NAND device found!!!

0 MiB

PCIe1: Root Complex of mini PCIe Slot, no link, regs @ 0xffe0a000

PCIe1: Bus 00 - 00

PCIe2: Root Complex of PCIe Slot, no link, regs @ 0xffe09000

PCIe2: Bus 01 - 01

In:    serial

Out:   serial

Err:   serial

Net:   eTSEC1: No support for PHY id ffffffff; assuming generic

eTSEC2: PHY is AR8033 (4dd074)

eTSEC3: PHY is AR8033 (4dd074)

eTSEC1, eTSEC2, eTSEC3

Hit any key to stop autoboot:  0

=> printenv

baudrate=115200

bdev=sda1

bootcmd=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs; tftp $ramdiskaddr $ramdiskfile;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr $ramdiskaddr $fdtaddr

bootdelay=10

bootfile=uImage

consoledev=ttyS0

eth1addr=00:04:9f:ef:01:02

eth2addr=00:04:9f:ef:01:03

ethact=eTSEC1

ethaddr=00:04:9f:ef:01:01

fdtaddr=c00000

fdtfile=p1010rdb.dtb

hostname=P1010RDB

hwconfig=usb1:dr_mode=host,phy_type=utmi

ipaddr=192.168.2.21

loadaddr=1000000

netdev=eth0

netmask=255.255.255.0

othbootargs=ramdisk_size=600000

ramboot=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs; tftp $ramdiskaddr $ramdiskfile;tftp $loadaddr $bootfile;tftp $fdtaddr $fdtfile;bootm $loadaddr $ramdiskaddr $fdtaddr

ramdiskaddr=2000000

ramdiskfile=rootfs.ext2.gz.uboot

rootpath=/opt/nfsroot

serverip=192.168.2.242

uboot=u-boot.bin

usbext2boot=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs; usb start;ext2load usb 0:4 $loadaddr $bootfile;ext2load usb 0:4 $fdtaddr $fdtfile;ext2load usb 0:4 $ramdiskaddr $ramdiskfile;bootm $loadaddr $ramdiskaddr $fdtaddr

usbfatboot=setenv bootargs root=/dev/ram rw console=$consoledev,$baudrate $othbootargs; usb start;fatload usb 0:2 $loadaddr $bootfile;fatload usb 0:2 $fdtaddr $fdtfile;fatload usb 0:2 $ramdiskaddr $ramdiskfile;bootm $loadaddr $ramdiskaddr $fdtaddr

Environment size: 1438/8188 bytes

=>

powerpc如何移植Linux系统,PowerPC平台 u-boot 移栽相关推荐

  1. 实践平台linux,关于构造Linux系统实践平台的设想

    摘 要 当前虽然有很多高校将Linux课程作为本科学生的必修课,但是在高校中专业的Linux实验室却并未普及.在不增加机房管理员工作量以及学生可以充分体验Linux系统性能的前提下,本文提出了一种利用 ...

  2. imx6ull移植Linux系统第二篇——Linux内核的移植

    imx6ull移植Linux系统第二篇--Linux内核的移植 花了大概两周的时间,把Linux的移植认真学了一遍,期间踩了不少坑,花费了不少时间去解决各种奇奇怪怪的问题,最终完成了uboot.系统镜 ...

  3. 【云原生之Docker实战】使用Docker部署Linux系统监控平台Netdata

    [云原生之Docker实战]使用Docker部署Linux系统监控平台Netdata 一.Netdata介绍 1.netdata简介 2.netdatar特点 二.检查本地Docker环境 1.宿主机 ...

  4. vs2015移植linux编译,windows平台移植(原linux项目)时,用vs2015开发,碰到的问题及处理方案记录...

    (1)问题记录一: 在#include 头文件后,出现如下报错信息: 解决方案: 在#include 头文件之前,先定义 #define HAVE_STRUCT_TIMESPEC 详细原因,参见以下网 ...

  5. stm32可以移植linux系统吗,如何在STM32上移植Linux?超详细的实操经验分享

    使用initramfs最简单的方式,莫过于用已经做好的cpio.gz把kernel里面那个空的给换掉.这是2.6 kernel天生支持的,所以,你不用做什么特殊的设置. kernel的config o ...

  6. 在Linux系统上安装Spring boot应用

    Unix/Linux 服务 systemd 服务 操作过程 1. 安装了JDK的centOS7虚拟机 注意下载linux版本JDK的时候不能直接通过wget这种直接链接下载,否则会解压不成功,应该打开 ...

  7. 嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤

    在嵌入式系统移植中重要的一部分是操作系统的移植,与其它操作系统相比,Linux大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用.修改.和扩展它.正是由于这一特色,嵌入式系统移植过程中Linu ...

  8. linux系统移植篇(二)—— Uboot使用介绍

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  9. Linux基础(3)--搭建最小的Linux系统

    搭建最小的Linux系统 1.平台 2.文件 3.步骤 4.实现简单的Hello World 1.平台 所需要的硬件平台为ARM-cortex A9内核的开发板,以iTOP-4412为例.软件需要以及 ...

  10. 在基于or1200处理器的SoC上移植linux

    经历了前端的艰苦奋斗.SoC前端设计已经调试完毕,如今直接进入uboot移植   首先cd入u-boot-master 找到子文件夹include下得de2_115.h文件进行改动: (下一步计划:加 ...

最新文章

  1. 计算机组成实验微程序控制器实验,计算机组成原理实验报告3++微程序控制器实验.doc...
  2. Java学习之JDK的安装与配置
  3. IDEA 生成时序图、类图
  4. 直接拿来用!谷歌开源网络库 TensorNetwork,GPU 处理提升 100 倍
  5. 5G 是未来的唯一选择?| 畅言
  6. centos llvm安装_CentOS7.x安装LLVM6.0
  7. 漫谈 Clustering (4): Spectral Clustering
  8. LQR控制算法及代码实践
  9. php网页顶端有乱码,四个常见html网页乱码问题及解决办法
  10. 2022年信息安全工程师上午真题及答案解析
  11. Angular +Ionic实现关注与取消关注
  12. 【安卓】电脑执行脚本控制安卓手机
  13. H5移动端网页自定义扫码
  14. 国外变电站3d可视化技术发展_变电站3D可视化运维管理!
  15. 视觉SLAM学习路线
  16. cmd操作MySQL 范式、单表查询(日记 day 3)
  17. DaVinci:Camera Raw(CinemaDNG)
  18. 【手机远程连接电脑】【TeamViewer版】
  19. 如何快速一次性卸载所有python包(第三方库)呢
  20. ASP.NET MVC5 网站开发实践 - 概述

热门文章

  1. git --amend 使用和撤销
  2. CSS文件在jsp 文件中应该放的位置
  3. 非零基础入门微信小程序
  4. 云上DevOps-CodePipeline,Packer和Terraform集成实践探索
  5. ImportError: No module named bs4
  6. 向linux服务器上传下载文件方式收集
  7. Day3-字符串-数组-正则表达式
  8. BZOJ 1507 [NOI2003]Editor
  9. Linux下USB转串口的驱动【转】
  10. 照猫画虎owin oauth for qq and sina