基于FS4412平台的Linux系统移植

实验一 交叉工具链的安装

【实验目的】

       了解交叉工具链的编译过程及其使用。

       说明:在实验中命令行提示符 为“$”表示在主机上运行,“#”表示在目标板上运行

【实验环境】

1、  ubuntu 12.04发行版

2、  FS4412平台

【实验步骤】

1、 如果要自己编译工具链,从以下链接下载源码

       crosstools-ng下载地址

http://ymorin.is-a-geek.org/download/crosstool-ng/

       同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是

http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/

在这里我们已经提前给大家准备好了,大家进入到我们的tools文件夹中.

把该文件夹移动到我们的Ubuntu系统中,然后执行。

$     cd  tools

$  sudodpkg  -i *.deb

2、  解压工具链压缩包

$  cd  ~

$ mkdir toolchain

$ cd toolchain 

将第一天/工具/gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压

$ tar  xvf  gcc-4.6.4.tar.xz

 

3、  环境变量的添加

       修改文件/etc/bash.bashrc添加如下内容

export  PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin

重启配置文件

$ source  /etc/bash.bashrc

 

4、  工具链的测试

$ arm-none-linux-gnueabi-gcc  –v

Using built-in specs.

COLLECT_GCC=arm-none-linux-gnueabi-gcc

COLLECT_LTO_WRAPPER=/home/david/Exynos4412/toolchain/gcc-4.6.4/bin/../libexec/gcc/arm-arm1176jzfssf-linux-gnueabi/4.6.4/lto-wrapper

Target: arm-arm1176jzfssf-linux-gnueabi

Configured with: /work/builddir/src/gcc-4.6.4/configure--build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu--target=arm-arm1176jzfssf-linux-gnueabi--prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4--with-sysroot=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot--enable-languages=c,c++ --with-arch=armv6zk --with-cpu=arm1176jzf-s--with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp--with-pkgversion=‘crosstool-NG hg+default-2685dfa9de14 - tc0002‘--disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap--disable-libgomp --disable-libssp --disable-libquadmath--disable-libquadmath-support --with-gmp=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-mpfr=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-mpc=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-ppl=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-cloog=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-libelf=/work/builddir/arm-arm1176jzfssf-linux-gnueabi/buildtools--with-host-libstdcxx=‘-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm‘--enable-threads=posix --enable-target-optspace --without-long-double-128--disable-nls --disable-multilib--with-local-prefix=/opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/sysroot--enable-c99 --enable-long-long

Thread model: posix

gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 -tc0002)

       这样我们的交叉工具链就安装好了

实验二 u-boot的烧写及使用

【实验目的】

       了解u-boot的常用命令和linux内核的引导。

【实验环境】

1、  ubuntu 12.04发行版

2、  u-boot-2010.03

3、  FS4412平台

4、  交叉编译器 arm-none-linux-gnueabi-gcc

【实验步骤】

1、 SD启动盘制作

a)        将第一天/工具/ sd_fusing拷贝到Linux下

b)       将SD卡插入电脑并识别

c)        进入sdfuse_d执行如下操作

       $ sudo ./mkuboot.sh  /dev/sdb

d)       在SD卡中创建目录sdupdate并把第一天/镜像中的u-boot-fs4412.bin拷贝到这个目录下

2、 u-boot的烧写

a)        连接串口和板子,运行串口通信程序(putty第一天工具中)

选择右上角的”Serial”,然后点击左下角的”Serial”

按照自己的主机的情况选择COM口其他必须一直,然后点击open打开串口

b)       关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)后打开电源

c)        将刚才做好的SD启动盘插入SD卡插槽

d)       重新打开开发板能够看到如下界面

在倒计时时按任意键

e)        烧写

在终端上执行

       sdfuse flashall

等待终端无输出是表示烧写结束

f)        关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源可以看到如下界面表示烧写成功

在倒计时时按任意键

 

3、 通过网络加载内核和文件系统

a)        将 第一天/镜像文件/uImage拷贝到ubuntu的/tftpboot下

b)       将 第一天/镜像文件/rootfs.tar.xz拷贝到ubuntu的/source下并解压

c)        将 第一天/镜像文件/exynos4412-fs4412.dtb拷贝到ubuntu的/tftpboot下

d)       修改虚拟机nfs配置文件/etc/exports,添加如下内容并重启nfs服务

/source/rootfs *(rw,sync,no_subtree_check,no_root_squash)

e)        重新驱动nfs服务

$ sudo /etc/init.d/nfs-kernel-server restart

f)        设置启动参数

# setenv serverip 192.168.9.120

# setenv ipaddr 192.168.9.233

# setenv bootcmd tftp 41000000 uImage\;tftp 42000000exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

#setenv bootargs root=/dev/nfsnfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.9.233

# saveenv

注意:192.168.9.120 对应Ubuntuip

        192.168.9.233 对应板子的ip

      这两个ip应该根据自己的实际情况适当修改      

 

g)       启动开发板看到如下现象表示成功通过网络挂载:

 

       这是可以输入一些Linux的命令测试

4、 从EMMC加载内核和文件系统

a)        拷贝第一天/镜像文件/ramdisk.img拷贝到虚拟机/tftpboot目录下

b)       烧写内核镜像到EMMC上

# tftp  41000000  uImage

# movi  write  kernel 41000000

 

c)        烧写设备树文件到EMMC上

# tftp  41000000  exynos4412-fs4412.dtb

# movi  write  dtb 41000000

 

d)       烧写文件系统镜像到EMMC上

# tftp  41000000  ramdisk.img

# movi  write  rootfs 41000000  300000

 

e)        设置启动参数

# setenv bootcmd movi read kernel 41000000\;movi read dtb42000000\;movi read rootfs 43000000 300000\;bootm 41000000 43000000 42000000

# saveenv

 

f)        重新启动开发板,u-boot自动加载、执行内核

5、  其他命令练习

        

 

6、 交叉编译和交叉调试

a)        将u-boot启动参数修改为网络启动

# setenv serverip 192.168.9.120

# setenv ipaddr 192.168.9.233

# setenv bootcmd tftp 41000000 uImage\;tftp 42000000exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

#setenv bootargs root=/dev/nfsnfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.9.233

# saveenv

注意:192.168.9.120对应Ubuntu的ip

        192.168.9.233 对应板子的ip

      这两个ip应该根据自己的实际情况适当修改     

b)       编辑程序源码myapp.c(自己写一个简单的c程序)

c)        交叉编译后复制到/source/rootfs   (编译时添加选项-g)

$arm-none-linux-gnueabi-gcc myapp.c –o myapp –g

$ cpmyapp /source/rootfs

d)       运行我们的myapp程序,观察输出结果

$./myapp

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。