系统移植实验手册.docx
- 文档编号:27749260
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:57
- 大小:366.38KB
系统移植实验手册.docx
《系统移植实验手册.docx》由会员分享,可在线阅读,更多相关《系统移植实验手册.docx(57页珍藏版)》请在冰豆网上搜索。
系统移植实验手册
实验一交叉工具链的安装
【实验目的】
了解交叉工具链的编译过程及其使用。
说明:
在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行
【实验环境】
1、ubuntu12.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/
2、解压工具链压缩包
$cd~
$mkdirtoolchain
$cdtoolchain
将第一天/工具/gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压
$tarxvfgcc-4.6.4.tar.xz
3、环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
exportPATH=$PATH:
/home/linux/toolchain/gcc-4.6.4/bin
重启配置文件
$source/etc/bash.bashrc
4、工具链的测试
$arm-none-linux-gnueabi-gcc–v
Usingbuilt-inspecs.
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
Configuredwith:
/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-NGhg+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
Threadmodel:
posix
gccversion4.6.4(crosstool-NGhg+default-2685dfa9de14-tc0002)
这样我们的交叉工具链就安装好了
实验二u-boot的烧写及使用
【实验目的】
了解u-boot的常用命令和linux内核的引导。
【实验环境】
1、ubuntu12.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)烧写
在终端上执行
sdfuseflashall
等待终端无输出是表示烧写结束
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-serverrestart
f)设置启动参数
#setenvserverip192.168.9.120
#setenvipaddr192.168.9.233
#setenvbootcmdtftp41000000uImage\;tftp42000000exynos4412-fs4412.dtb\;bootm41000000-42000000
#setenvbootargsroot=/dev/nfsnfsroot=192.168.9.120:
/source/rootfsrwconsole=ttySAC2,115200init=/linuxrcip=192.168.9.233
#saveenv
注意:
192.168.9.120对应Ubuntu的ip
192.168.9.233对应板子的ip
这两个ip应该根据自己的实际情况适当修改
g)启动开发板看到如下现象表示成功通过网络挂载:
这是可以输入一些Linux的命令测试
4、从EMMC加载内核和文件系统
a)拷贝第一天/镜像文件/ramdisk.img拷贝到虚拟机/tftpboot目录下
b)烧写内核镜像到EMMC上
#tftp41000000uImage
#moviwritekernel41000000
c)烧写设备树文件到EMMC上
#tftp41000000exynos4412-fs4412.dtb
#moviwritedtb41000000
d)烧写文件系统镜像到EMMC上
#tftp41000000ramdisk.img
#moviwriterootfs41000000300000
e)设置启动参数
#setenvbootcmdmovireadkernel41000000\;movireaddtb42000000\;movireadrootfs43000000300000\;bootm410000004300000042000000
#saveenv
f)重新启动开发板,u-boot自动加载、执行内核
5、其他命令练习
6、交叉编译和交叉调试
a)将u-boot启动参数修改为网络启动
#setenvserverip192.168.9.120
#setenvipaddr192.168.9.233
#setenvbootcmdtftp41000000uImage\;tftp42000000exynos4412-fs4412.dtb\;bootm41000000-42000000
#setenvbootargsroot=/dev/nfsnfsroot=192.168.9.120:
/source/rootfsrwconsole=ttySAC2,115200init=/linuxrcip=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-gccmyapp.c–omyapp–g
$cpmyapp/source/rootfs
d)复制gdbserver到/source/rootfs/bin(gdbserver在交叉工具链中找,路径为:
/home/linux/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/debug-root/bin)
e)在开发板上如下运行
#gdbserver192.168.9.233:
12345myapp&
f)在主机上运行交叉调试器
$arm-none-linux-gnueabi-gdbmyapp
g)在交叉调试器下和开发板gdbserver建立连接
(gdb)targetremote192.168.9.233:
12345
设置断点,输入命令c开始调试程序(注意观察串口输出)
实验三u-boot-2013.01的移植
【实验目的】
了解u-boot的代码结构及移植方法。
【实验环境】
1、ubuntu10.10发行版
2、u-boot-2013.01
3、FS_4412平台(EXYNOS4412)
4、交叉编译器arm-none-linux-gnueabi-gcc
【实验步骤】
一、建立自己的平台
1、下载源码
我们可以在下面这个网站上下载最新的和以前任一版本的uboot
ftp:
//ftp.denx.de/pub/u-boot/
2、解压uboot源码并进入目录
$tarxvfu-boot-2013.01.tar.bz2
$cdu-boot-2013.01R
3、指定交叉编译工具链
$vimMakefile
把
ifeq($(HOSTARCH),$(ARCH))
CROSS_COMPILE?
=
#endif
下添加
ifeq(arm,$(ARCH))
CROSS_COMPILE?
=arm-none-linux-gnueabi-
#endif
4、指定产品CPU
我们产品用的CPU是exynos4412
查看u-boot源码该CPU是否已支持
U-boot已支持,见arch/arm/cpu/armv7/exynos/
5、指定产品BOARD
找一个最类似的board配置修改,这里我们参考的是board/samsung/origen/
$cp-rfboard/samsung/origen/board/samsung/fs4412
$mvboard/samsung/fs4412/origen.cboard/samsung/fs4412/fs4412.c
$vimboard/samsung/fs4412/Makefile
修改origen.o为fs4412.o
$cpinclude/configs/origen.hinclude/configs/fs4412.h
$viminclude/configs/fs4412.h
修改
#defineCONFIG_SYS_PROMPT"ORIGEN#"
为
#defineCONFIG_SYS_PROMPT"fs4412#"
修改
#defineCONFIG_IDENT_STRINGforORIGEN
为
#defineCONFIG_IDENT_STRINGforfs4412
#vimboards.cfg
参考
origenarmarmv7origensamsungexynos
并在后面新增
fs4412armarmv7fs4412samsungexynos
6、编译u-boot
$makedistclean
$makefs4412_config
$make
编译完成后生成的u-boot.bin就是可执行的镜像文件。
但是该文件还不能在我们板子上运行,我们需要对u-boot源代码进行相应的修改。
2、实现能看到串口终端信息
1、确认第一条指令有运行到(点灯法)
●在arch/arm/cpu/armv7/start.S134行后添加点灯程序
#if1
ldrr0,=0x11000c40@GPK2_7led2
ldrr1,[r0]
bicr1,r1,#0xf0000000
orrr1,r1,#0x10000000
strr1,[r0]
ldrr0,=0x11000c44
movr1,#0xff
strr1,[r0]
#endif
●添加三星加密方式
exynos需要三星提供的初始引导加密后,我们的u-boot,才能被引导运行
$cpsdfuse_qu-boot-2013.01-rf
注:
sdfuse_q三星提供的加密处理
$cpCodeSign4SecureBootu-boot-2013.01-rf
注:
CodeSign4SecureBoot三星提供的安全启动方式
●修改Makefile
$vimMakefile
修改实现sdfuse_q的编译
在
$(obj)u-boot.bin:
$(obj)u-boot
$(OBJCOPY)${OBJCFLAGS}-Obinary$<$@
$(BOARD_SIZE_CHECK)
下添加
@#./mkuboot
@split-b14336u-boot.binbl2
@+make-Csdfuse_q/
@#cpu-boot.binu-boot-4212.bin
@#cpu-boot.binu-boot-4412.bin
@#./sdfuse_q/add_sign
@./sdfuse_q/chksum
@./sdfuse_q/add_padding
@rmbl2a*
@echo
注意是tab键缩进的,否则makefile编译报错
注意如果执行了makedistclean需重新拷贝CodeSign4SecureBoot
●拷贝编译脚本
$cpbuild.shu-boot-2013.01
$chmod777u-boot-2013.01/build.sh
$./buildsh
注:
build.sh脚本方式完成自动添加加密方式,
编译生成所需文件u-boot_fs4412.bin
烧写新的u-boot_fs4412.bin
复位,发现灯有点亮,说明我们的u-boot有运行到
2、实现串口输出
修改lowlevel_init.S文件
$vimboard/samsung/fs4412/lowlevel_init.S
●添加临时栈
在
lowlevel_init:
后添加
ldrsp,=0x02060000@useiRomstackinbl2
●添加关闭看门狗代码
在
beqwakeup_reset
后添加
#if1/*forclosewatchdog*/
/*PS-Holdhigh*/
ldrr0,=0x1002330c
ldrr1,[r0]
orrr1,r1,#0x300
strr1,[r0]
ldrr0,=0x11000c08
ldrr1,=0x0
strr1,[r0]
/*ClearMASK_WDT_RESET_REQUEST*/
ldrr0,=0x1002040c
ldrr1,=0x00
strr1,[r0]
#endif
●添加串口初始化代码
在uart_asm_init:
的
strr1,[r0,#EXYNOS4_GPIO_A1_CON_OFFSET]
后添加
ldrr0,=0x10030000
ldrr1,=0x666666
ldrr2,=CLK_SRC_PERIL0_OFFSET
strr1,[r0,r2]
ldrr1,=0x777777
ldrr2,=CLK_DIV_PERIL0_OFFSET
strr1,[r0,r2]
注释掉trustzone初始化
注释掉
bluart_asm_init
下的
bltzpc_init
重新编译u-boot
$./build.sh
烧写新的u-boot_fs4412.bin
复位会看到串口信息
3、网卡移植
1、添加网络初始化代码
$vimboard/samsung/fs4412/fs4412.c
在structexynos4_gpio_part2*gpio2;后添加
#ifdefCONFIG_DRIVER_DM9000
#defineEXYNOS4412_SROMC_BASE0X12570000
#defineDM9000_Tacs(0x1)
#defineDM9000_Tcos(0x1)
#defineDM9000_Tacc(0x5)
#defineDM9000_Tcoh(0x1)
#defineDM9000_Tah(0xC)
#defineDM9000_Tacp(0x9)
#defineDM9000_PMC(0x1)
structexynos_sromc{
unsignedintbw;
unsignedintbc[6];
};
/*
*s5p_config_sromc()-selecttheproperSROMCBankandconfigurethe
*bandwidthcontrolandbankcontrolregisters
*srom_bank-SROM
*srom_bw_conf-SMCBandwitdhregconfigurationvalue
*srom_bc_conf-SMCBankControlregconfigurationvalue
*/
voidexynos_config_sromc(u32srom_bank,u32srom_bw_conf,u32srom_bc_conf)
{
unsignedinttmp;
structexynos_sromc*srom=(structexynos_sromc*)(EXYNOS4412_SROMC_BASE);
/*ConfigureSMC_BWregistertohandleproperSROMCbank*/
tmp=srom->bw;
tmp&=~(0xF<<(srom_bank*4));
tmp|=srom_bw_conf;
srom->bw=tmp;
/*ConfigureSMC_BCregister*/
srom->bc[srom_bank]=srom_bc_conf;
}
staticvoiddm9000aep_pre_init(void)
{
unsignedinttmp;
unsignedcharsmc_bank_num=1;
unsignedintsmc_bw_conf=0;
unsignedintsmc_bc_conf=0;
/*gpioconfigur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 移植 实验 手册