Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368644
  • 博文数量: 149
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-27 14:53
文章分类

全部博文(149)

文章存档

2016年(3)

2015年(2)

2014年(144)

我的朋友

分类: IT职场

2016-12-18 18:42:04

一、初步修改

国内嵌入式厂商研发的S5PV210开发板大都基于SMDKV210评估板做了裁剪和调整,所以三星提供的u-boot、内核、文件系统大都适用于这些S5PV210开发板,我们就将三星提供的android_uboot_smdkv210.tar.bz2代码包移植到SMART210开发板。

1.    下载三星公司提供的android_uboot_smdkv210.tar.bz2源代码包,然后解压:

tar jxvf android_uboot_smdkv210.tar.bz2

进入目录:

cd u-boot-samsung-dev

2.    安装交叉编译器:

gedit Makefile

147行,我们发现u-boot使用arm-2009q3编译器:

ifeq ($(ARCH),arm)

#CROSS_COMPILE = arm-linux-

#CROSS_COMPILE = /usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux-

#CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-

CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

endif

2.1.3节我们已经安装好了arm-2009q3编译器:

3.    修改配置文件,原文件设定调试信息通过串口3输出,改为串口0输出:

vim include/configs/smdkv210single.h

将:

#define CONFIG_SERIAL3          1    /* we use UART3 on SMDKC110 */

修改为:

#define CONFIG_SERIAL1          1    /* we use UART1 on SMDKC110 */

4.    配置Uboot

make smdkv210single_config

5.    编译:

make

编译完毕后可以得到u-boot.bin。接下来将生成的u-boot.bin烧写到SD卡中,首先准备一张不小于2GBSD卡,并插到在VMware中装有Linux操作系统的PC机上。在识别SD读卡器的时候,有可能遇到被windows识别出来,而Linux看不到的情况。这时在VMware的菜单栏上依次点VMàRemovable DevicesàUSB Devicesà(你的SD卡)(USB2.0 Device),选择connect选项。

3-2 识别SD卡示意图1

     此时,可以看到Windows系统右下角弹出安全退出USB设备的消息提示,说明U盘已被虚拟系统识别,在VMware的右下角会看到一个USB的图标。


3-3 识别SD卡示意图2

通过#fdisk -l命令确认虚拟机中Linux系统是否识别U盘,如下图,笔者2GSD卡已经被识别,设备文件名称为/dev/sdb

 

3-4 识别SD卡示意图3

     在烧写U-boot.Bin之前,需要对SD卡进行格式化。在Linux的终端窗口,使用fdisk /dev/sdb命令删除原来所有分区,sdb为系统为SD卡分配的设备节点。注意,具体由节点名称而定,有可能是sdc,sde等。使用如下指令查询设备节点: cat /proc/partitions 示例如下:

3-5 查看磁盘分区

     sdb节点即为用户插入的SD卡,然后在终端下键入fdisk /dev/sdb命令

3-6 进行磁盘分区

         接下来的参数中选择dw,输入d,表示删除分区,输入w表示保存已经修改的分区信息。至此,原/dev/sdb被删除。拨掉SD卡,再插入PC机上,注意必须拨掉后再插入,否则仍然会提示存在/dev/sdb节点,会造成出错。然后就可以使用uboot源代码提供的sd_fusing.sh脚本文件进行烧写。

       在android_uboot_smdkv210.tar.bz2解压后的源代码包下,有sd_fusing文件夹,里面提供了诸多烧写SD卡的脚本,这里采用sd_fusing.sh脚本,该脚本内容如下:

#

# Copyright (C) 2010 Samsung Electronics Co., Ltd.

#             

#

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License version 2 as

# published by the Free Software Foundation.

#

####################################

reader_type1="/dev/sdb"

reader_type2="/dev/mmcblk0"

 

if [ -z $1 ]

then

    echo "usage: ./sd_fusing.sh "

    exit 0

fi

 

if [ $1 = $reader_type1 ]

then

    partition1="$11"

    partition2="$12"

    partition3="$13"

    partition4="$14"

 

elif [ $1 = $reader_type2 ]

then

    partition1="$1p1"

    partition2="$1p2"

    partition3="$1p3"

    partition4="$1p4"

 

else

    echo "Unsupported SD reader"

    exit 0

fi

 

if [ -b $1 ]

then

    echo "$1 reader is identified."

else

    echo "$1 is NOT identified."

    exit 0

fi

 

####################################

# make partition

echo "make sd card partition"

echo "./sd_fdisk $1"

./sd_fdisk $1

dd iflag=dsync oflag=dsync if=sd_mbr.dat of=$1

rm sd_mbr.dat

 

####################################

# format

umount $partition1 2> /dev/null

umount $partition2 2> /dev/null

umount $partition3 2> /dev/null

umount $partition4 2> /dev/null

 

echo "mkfs.vfat -F 32 $partition1"

mkfs.vfat -F 32 $partition1

 

#echo "mkfs.ext2 $partition2"

#mkfs.ext2 $partition2 

 

#echo "mkfs.ext2 $partition3"

#mkfs.ext2 $partition3 

 

#echo "mkfs.ext2 $partition4"

#mkfs.ext2 $partition4 

 

####################################

# mount

#umount /media/sd 2> /dev/null

#mkdir -p /media/sd

#echo "mount -t vfat $partition1 /media/sd"

#mount -t vfat $partition1 /media/sd

 

####################################

#

bl1_position=1

uboot_position=49

 

echo "BL1 fusing"

./mkbl1 ../u-boot.bin SD-bl1-8k.bin 8192

dd iflag=dsync oflag=dsync if=SD-bl1-8k.bin of=$1 seek=$bl1_position

rm SD-bl1-8k.bin

 

####################################

#

echo "u-boot fusing"

dd iflag=dsync oflag=dsync if=../u-boot.bin of=$1 seek=$uboot_position

 

####################################

#

echo "U-boot image is fused successfully."

echo "Eject SD card and insert it again."

烧写到SD卡时,了解一下SD卡的分区,下面是有关SD卡分区的图,它的分区情况:


3-7 SD卡分区示意图

在这里可以看到,SD卡一块的大小为512B,第一块为保留块,紧接着的8K存放BL1,所以BL1烧写的起始块标号为1,这也就是第二条烧写命令中seek=1的来源了;接下来存放环境变量,有的资料中将环境变量与BL1文件总称为BL1文件,不过这是的BL1文件就不再是8K大小了,而是加上环境变量的大小共24K了,也就是48块;之后存放BL2文件,也就是uboot.bin,起始块标号49。最后的部分是我们自己的其他使用拷贝空间了。

通过阅读脚本内容,了解到该脚本会探测Linux系统下dev文件夹下的设备文件,并进行格式化,然后将编译生成的Uboot.bin8K的内容,通过mkbl1可执行文件提取出来,烧写到存储介质的bl1_position位置,即第一个扇区,然后将剩余完整的Uboot烧写到uboot_position位置,即第49个扇区开始的位置。

值得注意的是:不同用户将SD卡读卡器插入USB口后,在dev文件夹下,SD卡的设备文件名可能有所不同,这时需根据自己的情况修改reader_type1="/dev/sdb"文件内容。dd命令是linux下非常有用的一个命令,作用就是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

     通过sd_fusing.sh脚本烧写SD卡成功后,即可将SD卡插入开发板的SD卡插槽,将启动设置按键扳至SD卡启动一侧。同时开启Putty调试终端,显示内容如下:

OK

U-Boot 1.3.4 (Dec 25 2013 - 10:07:18): for E&E210

CPU:  S5PV210@1000MHz(OK)

        APLL = 1000MHz, HclkMsys = 200MHz, PclkMsys = 100MHz

        MPLL = 667MHz, EPLL = 80MHz

                       HclkDsys = 166MHz, PclkDsys = 83MHz

                       HclkPsys = 133MHz, PclkPsys = 66MHz

                       SCLKA2M  = 200MHz

Serial = CLKUART

Board:   SMDKV210

DRAM:    256 MB

SD/MMC:  1946MB

NAND:    512 MB

In:      serial

Out:     serial

Err:     serial

checking mode for fastboot ...

Hit any key to stop autoboot:  0

SMDKV210 #

初次编译后可以成功运行,S5PV210运行在1GHz,但认出来的内存大小等信息有误。需要进一步进行修改。

阅读(1322) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~