2011.03 u-boot的移植 OK6410

871阅读 0评论2012-09-10 walterpeng
分类:

解压U-BOOT,使用命令
tar -jxvf u-boot-2011.03.tar.bz2 -C /usr/linux
解压GCC,
tar -xvzf /home/ziliao/u-boot/arm-linux-gcc-4.3.2.tgz -C /

广告时间,加入tar简单用法:
tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思

压缩

tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

解压

tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip

总结
1、*.tar 用 tar –xjvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xvzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2 用 tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用 tar –xZf 解压
8、*.rar 用 unrar e 解压
9、*.zip 用 unzip 解压
【编译】
先设置环境变量CROSS_COMPILE=/usr/local/arm/bin/arm-linux-
export CROSS_COMPILE=/usr/local/arm/bin/arm-linux-
发现编译不过,提示找不到arm-linux-gcc,进入目录发现此文件为文本命令文件,经研究发现路径改为
export CROSS_COMPILE=/usr/local/arm/bin/arm-none-linux-gnueabi- 就可以了。
还有另外方法就是删掉文本命令arm-linux-gcc,然后在终端输入
ln -s /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc /usr/local/arm/4.3.2/bin/arm-linux-gcc,便创建了arm-none-linux-gnueabi-gcc的链 接,就可以用命令 export CROSS_COMPILE=/usr/local/arm/bin/arm-linux- 设置环境了。
make clean
make smdk6400_config
make

编译失败,提示
arch/arm/cpu/arm1176/start.o: In function `_end_ofs':
/home/max/U-Boot/u-boot/arch/arm/cpu/arm1176/start.S:61: undefined reference to `_end'
这个错误要修改
uboot.lds
nand_spl/u-boot.lds
nand_spl/board/samsung/smdk6400/u-boot.lds
board/samsung/smdk6400/u-boot-nand.lds
加入 _end = .;
在这一行的前面
 
.bss __rel_dyn_start (OVERLAY) : {

再次编译就可以成功了

现在进入移植步骤:
进入u-boot-2011.03文件夹
cd u-boot-2011.03/board/samsung/
建立smdk6410文件夹
mkdir smdk6410    
复制6400文件夹下的所有代码到6410下
cp -rf smdk6400/* smdk6410
进入smdk6410
cd smdk6410
将smdk6400_and_spl.c和smdk6400.c改为
smdk6410_and_spl.c和smdk6410.c

打开smdk6410中的Makefile
将COBJS-y    := smdk6400.o
改为COBJS-y    := smdk6410.o

进入include/configs/
复制smdk6400.h 并改名为smdk6410.h
cp -af smdk6400.h smdk6410.h

进入U-boot根目录下的Makefile
找到smdk6400_noUSB_config \ 
将有关6400的所有行复制并将其中的6400替换为6410
smdk6410_noUSB_config    \
smdk6410_config    :    unconfig
    @mkdir -p $(obj)include $(obj)board/samsung/smdk6410
    @mkdir -p $(obj)nand_spl/board/samsung/smdk6410
    @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
    @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
    @if [ -z "$(findstring smdk6410_noUSB_config,$@)" ]; then            \
        echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
    else                                        \
        echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
    fi
    @$(MKCONFIG) smdk6410 arm arm1176 smdk6410 samsung s3c64xx
    @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

进入nand_spl/board/samsung/
cd nand_spl/board/samsung/
新建目录smdk6410并将smdk6400下的所有文件复制到smdk6410中
mkdir smdk6410
cp -ar smdk6400/* smdk6410/

进入smdk6410
把6400相关的文件名改成6410

打开smdk6410中的Makefile
把6400改成相关的6410后保存

然后编译OK,生成uboot.bin

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

根据实验,已修改补充原作者漏掉的部分。
闲来无事,给自己的开发板移植一下新的U-boot 最新的为2011.03
步骤1
在移植中首先用
tar -jxvf u-boot-latest.tar.bz2
解压到自己的目录下
步骤2
然后进入u-boot-2011.03文件夹
cd u-boot-2011.03/board/samsung/
建立smdk6410文件夹
mkdir smdk6410    
复制6400文件夹下的所有代码到6410下
cp -rf smdk6400/* smdk6410
进入smdk6410
cd smdk6410
将smdk6400_and_spl.c和smdk6400.c改为
smdk6410_and_spl.c和smdk6410.c
打开smdk6410中的Makefile
将COBJS-y    := smdk6400.o
改为COBJS-y    := smdk6410.o
打开board/samsung/smdk6410/u-boot-nand.lds
在.bss __rel_dyn_start (OVERLAY) : {
前加上 _end = .;
这个是Uboot中的一个bug,会导致undefined reference to `_end'
还要修改后面步骤4中nand_spl/board/samsung/smdk6410文件夹的u-boot.lds
回U-boot根目录 进入include/configs/
复制smdk6400.h 并改名为smdk6410.h
步骤3
打开U-boot根目录下的Makefile
首先指定交叉编译工具
找到CROSS_COMPILE?=在等号后面添加arm-linux-
找到smdk6400_noUSB_config \ 
将有关6400的所有行复制并将其中的6400替换为6410
smdk6410_noUSB_config    \
smdk6410_config    :    unconfig
    @mkdir -p $(obj)include $(obj)board/samsung/smdk6410
    @mkdir -p $(obj)nand_spl/board/samsung/smdk6410
    @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
    @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
    @if [ -z "$(findstring smdk6410_noUSB_config,$@)" ]; then            \
        echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
    else                                        \
        echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/smdk6410/config.tmp;\
    fi
    @$(MKCONFIG) smdk6410 arm arm1176 smdk6410 samsung s3c64xx
    @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
步骤4
从U-boot根目录,进入nand_spl/board/samsung/
cd nand_spl/board/samsung/
新建目录smdk6410并将smdk6400下的所有文件复制到smdk6410中
mkdir smdk6410
cp -ar smdk6400/* smdk6410/
进入nand_spl/board/samsung/smdk6410文件夹
打开u-boot.lds
在.bss __rel_dyn_start (OVERLAY) : {
前加上 _end = .;
还要修改nand_spl/board/samsung/smdk6410下的文件名,把6400相关的改成6410
步骤5
再修改u-boot根目录进入nand_spl/board/samsung/smdk6410/Makefile中的,把6400改成相关的6410,与第四步修改的文件匹配。
步骤6
然后make smdk6410_config
make编译通过,呵呵

上一篇:UBOOT移植中DM9000AEP网卡驱动终于搞定
下一篇:OK6410 uboot的网络移值(成功)