系统移植试验手册0819new.docx
- 文档编号:8404981
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:55
- 大小:161.53KB
系统移植试验手册0819new.docx
《系统移植试验手册0819new.docx》由会员分享,可在线阅读,更多相关《系统移植试验手册0819new.docx(55页珍藏版)》请在冰豆网上搜索。
系统移植试验手册0819new
嵌入式学院实验手册
系统移植部分
嵌入式学院教材开发部编著
(内部资料,请勿外传)
嵌入式学院(2010)版权所有V3.0
目录
目录2
实验一交叉工具链的移植3
实验二u-boot的烧写及使用8
实验三u-boot-2010.03的移植12
实验四linux-2.6.22.6内核的编译和配置31
实验五linux-2.6.35内核移植—网卡驱动的添加34
实验六linux-2.6.35内核移植—Nandflash驱动的添加36
实验七linux-2.6.35内核移植—LCD驱动的添加38
实验八linux-2.6.35内核移植—USB驱动的添加40
实验九linux-2.6.35内核移植—SD卡驱动的添加42
实验十linux-2.6.35内核移植—yaffs2文件系统的支持45
实验十一内核调试47
实验十二内存调试50
实验十三文件系统的移植53
实验十四UDEV的移植58
实验一交叉工具链的移植
【实验目的】
了解交叉工具链的编译过程及其使用。
说明:
在本系统移植课程实验中命令行提示符“$”表示是在主机上执行,“#”表示在目标板执行
【实验环境】
1、Ubuntu10.10发行版
2、FS2410平台
【实验步骤】
1、源码下载
Crosstools-ng下载地址
http:
//ymorin.is-a-geek.org/download/crosstool-ng/
同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是
http:
//ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/
我这里选用的是crosstool-ng-1.8.1.tar.bz2
并下载补丁
000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
001-binutils_binutils_remove_faulty_patch.patch
002-kconfig_resync_curses_check_with_Linux_kernel.patch
2、工具的安装
在使用之前必须安装一些软件
$sudoapt-getinstallgawkautotools-devautomaketexinfolibtoolcvspatchbisonflexlibncurses5-dev
3、必要目录的创建
/home/linux目录下,$mkdirs3c2410-2.6.35$mkdirtoolchain
$cds3c2410-2.6.35
$mkdirtoolchain
$cdtoolchain
$mkdirtoolchain-build
$mkdirtoolchain-install
把下列源码包复制到目录/home/linux/s3c2410-2.6.35/toolchain
crosstool-ng-1.8.1.tar.bz2
000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
001-binutils_binutils_remove_faulty_patch.patch
002-kconfig_resync_curses_check_with_Linux_kernel.patch
4、解压源码并打补丁
$tarxvfcrosstool-ng-1.8.1.tar.bz2
$cdcrosstool-ng-1.8.1
$patch–p1< ../000-scripts_log_do_not_interpret_log_string_as_printf_format.patch
$patch–p1< ../001-binutils_binutils_remove_faulty_patch.patch
$patch–p1<../002-kconfig_resync_curses_check_with_Linux_kernel.patch
5、配置并编译crosstool-ng-1.8.1
$./configure--prefix=/home/linux/s3c2410-2.6.35/toolchain/toolchain-install
$make
$makeinstall
6、 配置工具链选项
$cd../toolchain-build
$cp../crosstool-ng-1.8.1/samples/arm-unknown-linux-gnueabi/*./
$mvcrosstool.config.config
$../toolchain-install/bin/ct-ngmenuconfig
Pathsandmiscoptions--->
(${HOME}/src)Localtarballsdirectory
(${HOME}/x-tools/${CT_TARGET})Prefixdirectory
修改为
Pathsandmiscoptions--->
(/home/linux/Downloads)Localtarballsdirectory//源码包存放路径
(/home/linux/toolchain)Prefixdirectory//工具生成后的安装路径
Targetoptions--->
(armv4t)Architecturelevel
(arm9tdmi)EmitassemblyforCPU
(arm920t)TuneforCPU
Ccompiler--->
[]Java
OperatingSystem--->
[]Checkinstalledheaders
Pathsandmiscoptions--->
(1)Numberofparalleljobs
Toolchainoptions--->
(none)Tuple'svendorstring
Ccompiler--->
(crosstool-NG-${CT_VERSION}-farsight)gccIDstring
修改.config文件,将文件中的2.6.33.2全部改为2.6.35
7、 目标代码准备
拷贝下面文件到/home/linux/Downloads目录下:
binutils-2.19.1.tar.bz2
gcc-4.3.2.tar.bz2
glibc-ports-2.9.tar.bz2
linux-2.6.35.tar.bz2
ncurses-5.7.tar.gz
dmalloc-5.5.2.tgz
gdb-6.8.tar.bz2
gmp-4.3.2.tar.bz2
ltrace_0.5.3.orig.tar.gz
strace-4.5.19.tar.bz2
duma_2_5_15.tar.gz
glibc-2.9.tar.bz2
libelf-0.8.13.tar.gz
mpfr-2.4.2.tar.bz2
Sstrip.c
8、工具链编译
$../toolchain-install/bin/ct-ngbuild
这个过程比较时间比较长,1.5小时左右
9、环境变量的添加
修改文件/etc/bash.bashrc添加如下内容
exportPATH=$PATH:
/home/linux/toolchain/bin
重启配置文件
$sourcebash.bashrc
10、工具链的测试
$arm-none-linux-gnueabi-gcc–v
Usingbuilt-inspecs.
Target:
arm-none-linux-gnueabi
Configuredwith:
/home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/src/gcc-4.3.2/configure--build=i686-build_pc-linux-gnu--host=i686-build_pc-linux-gnu--target=arm-none-linux-gnueabi--prefix=/home/linux/toolchain--with-sysroot=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root--enable-languages=c,c++,fortran--disable-multilib--with-arch=armv4t--with-cpu=arm9tdmi--with-tune=arm920t--with-float=soft--with-pkgversion=crosstool-NG-1.8.1-none--disable-sjlj-exceptions--enable-__cxa_atexit--disable-libmudflap--with-gmp=/home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/arm-none-linux-gnueabi/build/static--with-mpfr=/home/linux/s3c2410-2.6.35/toolchain/toolchain-build/targets/arm-none-linux-gnueabi/build/static--enable-threads=posix--enable-target-optspace--with-local-prefix=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root--disable-nls--enable-symvers=gnu--enable-c99--enable-long-long
Threadmodel:
posix
gccversion4.3.2(crosstool-NG-1.8.1-none)
这个时候我们的工具链就生成了
~/s3c2410-2.6.35/toolchain/toolchain-build/targets/arm-none-linux-gnueabi/build/build-gdb-gdbserver/gdbserver
实验二u-boot的烧写及使用
【实验目的】
了解U-boot-2010.03的代码结构及移植方法。
【实验环境】
1、Ubuntu10.10发行版
2、u-boot-2010.03
3、FS2410平台
4、交叉编译器arm-none-linux-gnueabi-gcc
【实验步骤】
1、u-boot的烧写
使用H-jtag将u-boot烧写在2410开发板的nandflash的零地址上,过程与arm实验时相同,区别在于选择flash上。
我们选择的是K9VF1208,如图
烧写完成后打开终端,重启开发板,显示如下
2、设置基本的u-boot环境变量
主机ip设置
#setenvserverip192.168.1.2
目标板ip设置
#setenvipaddr192.168.1.3
保存环境变量
#saveenv
3、内核烧写
内核和文件系统的烧写都使用的是u-boot提供的命令如下:
#tftp30008000zImage
#nanderase40000200000
#nandwrite3000800040000200000
4、文件系统烧写
#tftp30008000rootfs.cramfs
#nanderase240000800000
#nandwrite30008000240000800000
5、启动参数设置
#setenvbootcmdnandread3000800040000200000\;go30008000
#setenvbootargsroot=/dev/mtdblock2init=/linuxrcconsole=ttySAC0,115200
#savenv
6、重新启动开发板,最终会进入如下界面,这便是一个最简linux系统
7、u-boot其他命令
u-boot支持那些命令我们可以通过在终端上输入”?
”查看
实验三u-boot-2010.03的移植
【实验目的】
了解U-boot-2010.03的代码结构及移植方法。
【实验环境】
1、Ubuntu10.10发行版
2、u-boot-2010.03
3、FS2410平台
4、交叉编译器arm-none-linux-gnueabi-gcc
【实验步骤】
说明:
后面实验中的命令行提示符是($)则为主机命令(主机上执行),(#)则为开发板命令(开发板上执行)
1、建立自己的平台
1、下载源码
我们可以在下面这个网站上下载最新的和以前任一版本的uboot
ftp:
//ftp.denx.de/pub/u-boot/
我们这里使用的是u-boot-2010.03.tar.bz2
2、解压uboot源码
$tarjxvfu-boot-2010.03.tar.bz2
3、进入到uboot源码
$cdu-boot-2010.03
4、添加FS2410平台信息
我们关心的班级相关内容文件或目录
u-boot-2010.03/Makefile
u-boot-2010.03/cpu/arm920t/start.S
u-boot-2010.03/board/Samsung/smdk2410
u-boot-2010.03/lib_arm
u-boot-2010.03/include/configs/smdk2410.h
smdk2410是s3c2410的标准板,我们在smdk2410的基础上做FS2410的移植
$cdboard/samsung/
$cpsmdk2410fs2410–a
$cdfs2410
$mvsmdk2410.cfs2410.c
$vimMakefile
修改
COBJS:
=smdk2410.oflash.o
为
COBJS:
=fs2410.oflash.o
$cdinclude/configs
$cpsmdk2410.hfs2410.h
修改u-boot顶层目录下的Makefile,按照smdk2410的内容添加fs2410的内容
$vimMakefile
在
smdk2410_config:
unconfig
@$(MKCONFIG)$(@:
_config=)armarm920tsmdk2410samsungs3c24x0
下添加:
fs2410_config:
unconfig
@$(MKCONFIG)$(@:
_config=)armarm920tfs2410samsungs3c24x0
修改编译器
在
ifeq($(HOSTARCH,$(ARCH))
CROSS_COMPILE?
=
endif
下添加:
ifeq(arm,$(ARCH))
CROSS_COMPILE?
=arm-none-linux-gnueabi-
endif
5、编译u-boot-2010.03
$makedistclean
$makefs2410_config
$make
这个时候我们就可以得到一个u-boot.bin也就是我们的目标文件,但是这个文件通常情况下是不能够正常工作的,我们还需要对u-boot源代码进行进一步的修改。
2、针对我们的FS2410平台进行进一步的修改
1、u-boot源码中的中断屏蔽位
在s3c2410中有11个子中断屏蔽位代码里只有10个
修改cpu/arm920t/start.S
修改
#ifdefined(CONFIG_S3C2410)
ldr r1,=0x3ff
ldr r0,=INTSUBMSK
str r1,[r0]
#endif
为:
#ifdefined(CONFIG_S3C2410)
ldr r1,=0x7ff
ldr r0,=INTSUBMSK
str r1,[r0]
#endif
2、修改配置文件include/configs/fs2410.h
1)命令行提示符的修改:
#defineCONFIG_SYS_PROMPT"SMDK2410#"
改成:
#defineCONFIG_SYS_PROMPT"fs2410#"
2)网络参数设置
修改
#defineCONFIG_ETHADDR 08:
00:
3e:
26:
0a:
5b
#defineCONFIG_NETMASK255.255.255.0
#defineCONFIG_IPADDR 10.0.0.110
#defineCONFIG_SERVERIP 10.0.0.1
为
#defineCONFIG_ETHADDR 11:
22:
33:
44:
55:
66
#defineCONFIG_NETMASK255.255.255.0
#defineCONFIG_IPADDR 192.168.1.222
#defineCONFIG_SERVERIP 192.168.1.223
3)内核加载地址的修改
修改
#defineCONFIG_SYS_LOAD_ADDR0x33000000
改成:
#defineCONFIG_SYS_LOAD_ADDR0x30008000
4)Nand功能添加
对照include/config_cmd_default.h和include/config_cmd_all.h添加我们需要的相应功能。
Nand的功能的添加
#defineCONFIG_CMD_NAND /*NANDsupport*/
#ifdefined(CONFIG_CMD_NAND)
#defineCONFIG_SYS_MAX_NAND_DEVICE1
#defineCONFIG_SYS_NAND_BASE0x4E000000
#defineCONFIG_NAND_S3C2410
#defineSTACK_BASE0x33f00000
#defineSTACK_SIZE0x8000
/*NandFlash*/
#defineCONFIG_MTD_NAND_VERIFY_WRITE1
#endif
5)同时支持nand启动和nor启动
#ifdefined(CONFIG_S3C2410)
#defineCONFIG_S3C2410_NAND_BOOT1//nand启动
#defineCONFIG_S3C2410_NOR_BOOT1//nor启动
#endif
6)环境变量保存位置
添加:
#ifdefCONFIG_S3C2410_NOR_BOOT
#defineCONFIG_ENV_IS_IN_FLASH1/*common/env_flash.c*/
#defineCONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE+0x30000)
#endif
#ifdefCONFIG_S3C2410_NAND_BOOT
#defineCONFIG_ENV_IS_IN_NAND1/*common/env_nand.c*/
#defineCONFIG_ENV_SIZE0x10000
#defineCONFIG_ENV_OFFSET0x30000
#defineNAND_CTL_BASE0x4E000000
/*Offset*/
#defineoNFCONF0x00
#defineoNFCMD0x04
#defineoNFADDR0x08
#defineoNFDATA0x0c
#defineoNFSTAT0x10
#defineoNFECC0x14
#endif
7)USB功能的添加
#defineCONFIG_CMD_FAT /*FATsupport*/
#defineCONFIG_CMD_USB /*USBsupport*/
#ifdefined(CONFIG_CMD_USB)
#defineCONFIG_DOS_PARTITION
#defineCONFIG_USB_OHCI
#defineCONFIG_USB_STORAGE
#defineCONFIG_SUPPORT_VFAT
#defineLITTLEENDIAN
#endif
Ping命令的添加
#defineCONFIG_CMD_PING /*pingsupport*/
8)Norflash(sst39vf1601)及Norflash相关内容的
注释掉
#defineCONFIG_AMD_LV400 1 /*uncommentthisifyouhaveaLV400flash*/
添加
#defineCONFIG_SST_39VF16011
添加
#ifdefCONFIG_SST_39VF1601
#definePHYS_FLASH_SIZE 0x00200000/*2M*/
#defineCONFIG_SYS_MAX_FLASH_SECT (512) /*maxnumberofsectorsononechip*/
#endif
3、添加Nand启动功能(修改cpu/arm920t/start.S)
u-boot默认情况下是nar启动,这里我们添加nand启动的内容:
1)添加头文件
#include
#include
2)添加nand启动标志位
/*addforenv_nand.c*/
.externpbootflag
@pbootflag:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 移植 试验 手册 0819 new