📄 在s3c4510b评估板上移植uclinux-20030305全过程--电子技术文章-技术资料-广东电子商贸网.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0067)http://www.guangdongdz.com/special_column/techarticle/old/2727.html -->
<HTML><HEAD><TITLE>在S3C4510B评估板上移植uclinux-20030305全过程--电子技术文章-技术资料-广东电子商贸网</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META
content=在S3C4510B评估板上移植uclinux-20030305全过程,电子相关的技术文章,包括:传感技术,存储技术,电源技术,单片机技术,电测仪表,接口电路,模拟技术,元器件与工艺,嵌入式系统等
name=description>
<META
content=在S3C4510B评估板上移植uclinux-20030305全过程,A/DD/A技术,传感技术,存储技术,EDA技术,MCU&DSP,电源技术,单片机技术,接口电路技术,模拟技术,嵌入式系统,数字信号处理技术,IC等
name=keywords>
<STYLE type=text/css>BODY {
MARGIN-TOP: 0px
}
</STYLE>
<LINK
href="在S3C4510B评估板上移植uclinux-20030305全过程--电子技术文章-技术资料-广东电子商贸网.files/css.css"
type=text/css rel=stylesheet>
<STYLE type=text/css>.style9 {
FONT-WEIGHT: bold; FONT-SIZE: 18px
}
</STYLE>
<SCRIPT language=JavaScript>
<!--
function RegularPic(w,h)
{
var intwidth,intheight,intrate;
intwidth = document.img.width;
intheight = document.img.height;
if (document.img.width > w || document.img.height > h){
if (intwidth/ w > intheight/ h)
{
intrate = intwidth/ w;
}
else
{
intrate = intheight/ h;
}
document.img.width = intwidth / intrate;
document.img.height = intheight / intrate;
}
}
//-->
</SCRIPT>
<META content="MSHTML 6.00.2900.2995" name=GENERATOR></HEAD>
<BODY oncontextmenu=self.event.returnValue=false onselectstart="return false"
onkeydown="if(event.keyCode==78&&event.ctrlKey)return false;">
<SCRIPT
src="在S3C4510B评估板上移植uclinux-20030305全过程--电子技术文章-技术资料-广东电子商贸网.files/Top.htm"></SCRIPT>
<TABLE cellSpacing=1 cellPadding=6 width=778 align=center border=0>
<TBODY>
<TR>
<TD bgColor=#ffffff height=23><A href="http://www.guangdongdz.com/">首页</A>
> <A
href="http://www.guangdongdz.com/technology_information.html">技术资料</A>
> <A
href="http://www.guangdongdz.com/special_column/techarticle/index.html">技术文章</A>
> <A
href="http://www.guangdongdz.com/special_column/techarticle/catalogue_10_1.html">嵌入式设计</A>
> <SPAN
class=copyright01>在S3C4510B评估板上移植uclinux-20030305全过程</SPAN></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top bgColor=#f7f7f7 height=90>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=10 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=bottom height=45>
<P class=style9
align=center>在S3C4510B评估板上移植uclinux-20030305全过程</P></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="92%" border=0>
<TBODY>
<TR>
<TD bgColor=#999999 height=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD height=30>
<DIV class=copyright01 align=center><A
href="http://www.guangdongdz.com/">http:www.guangdongdz.com</A> 2004-7-2 liber
</DIV></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=20 width="100%" border=0>
<TBODY>
<TR>
<TD class=fonts14>
<DIV align=left>
<TABLE style="MARGIN: 0px 5px" cellSpacing=0 cellPadding=0
align=left bgColor=#f7f7f7 border=0>
<TBODY>
<TR>
<TD><!--画中画广告开始--><SPAN>
<SCRIPT
src="在S3C4510B评估板上移植uclinux-20030305全过程--电子技术文章-技术资料-广东电子商贸网.files/300_250.js"></SCRIPT>
</SPAN><!--画中画广告结束--></TD></TR></TBODY></TABLE>
<P><BR>作者 liber</P>
<P>来自: 北京</P>
<P><BR>--------------------------------------------------------------------------------</P>
<P>跟踪3天反汇编代码,终于将uclinux-20030305在S3C4510B的板子上跑了起来,现将移植的全过程写出来,与大家分享
<BR></P>
<P>一、下载所需工具、压缩包
<BR>uClinux-dist-20030305.tar.gz(http://www.uclinux.org/)
<BR>arm-elf-tools-20030314.sh <BR>二、要修改的文件列表: <BR>1.
../linux-2.4.x/arch/armnommu/mach-snds100/arch.c
<BR>MACHINE_START(SAMSUNG, "SNDS100")-〉MACHINE_START(SNDS100,
"SNDS100")
<BR>[说明]这个文件的错误是旧版的遗迹,以前的版本对于4510b使用统一的标识samsung但是由于最新版新加入了对samsung其他板子的支持,所以,修改了这一标识,对于s3c4510b改用snds100,但是这一修改在这个版本中并没有完全统一起来,这也是多处错误的根本原因。
<BR>2. ../linux-2.4.x/arch/armnommu/config.in <BR>在if [
"$CONFIG_BOARD_SNDS100" = "y" ]项中添加: <BR>define_bool
CONFIG_CPU_S3C4510 y
<BR>[说明]在这个配置文件中,CONFIG_BOARD_SNDS100一项居然少了cpu类型定义,对比其他项就会发现这一问题,该项在armnommu/kernel/head-armv.S中用到。
<BR>3. ../linux-2.4.x/arch/armnommu/mach-snds100/Makefile
<BR>O_TARGET := samsung.o ->O_TARGET := snds100.o
<BR>[说明]这个makefile的修改是为了和1保持一致,再make的过程中,使用snds100标识链接文件。 <BR>4.
../linux-2.4.x/arch/armnommu/kernel/head-armv.S <BR>#if
defined(CONFIG_ARCH_SAMSUNG) && defined(CONFIG_CPU_ARM710)
-> <BR>#if defined(CONFIG_CPU_S3C3410) ||
defined(CONFIG_CPU_S3C4530)
<BR>[说明]这里也是由于samsung和snds100使用环乱造成的,如果不修改,之后的一段程序将被预编译,会出现LC0重定义的错误,因为此前的snds100已经声明LC0,实际上之后的程序时不应该被预编译的,那些是3410和4530专用的。
<BR>5. /Makefile <BR>TFTPDIR = /tftpboot后加上: <BR>LINUXTARGET=bzImage
<BR># normal make targets 中加入: <BR>.PHONY: images <BR>images:
<BR>$(MAKE) -C $(VENDDIR) images <BR>all: subdirs romfs modules
modules_install image linux 后加入 images
<BR>[说明]这里的修改,和6的第一条是为了生成压缩的rom映像文件和ramf可执行的bin文件。 <BR>6.
/vendors/Samsung/4510B/Makefile <BR>最后加入: <BR>images:
<BR>arm-elf-objcopy -O binary -R .note -R .comment -S
$(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/uclinux_ram.bin <BR>cp
$(ROOTDIR)/$(LINUXDIR)/arch/armnommu/boot/zImage
$(IMAGEDIR)/uclinux_rom.bin <BR>同时注释掉:$(CROSS_COMPILE)objcopy …… 部分
<BR>在 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
后加入(这里生成romfs.o): <BR>arm-elf-ld -r -o
$(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
<BR>[说明]第一条是5的延续,第二条是生成romfs.o文件,以备后用。 <BR>7. ../linux-2.4.x
/arch/armnommu/boot/compressed/Makefile <BR>找到$(LD) $(ZLDFLAGS)
$(HEAD) $(OBJS) piggy.o -o $(LINUX) 改为: <BR>$(LD) $(ZLDFLAGS)
$(HEAD) $(OBJS) piggy.o $(LIBGCC) -o $(LINUX) <BR>[说明]生成linux
kernel,包含必要的库支持,$(LIBGCC)来自于arm-elf-tools库。 <BR>找到ZLDFLAGS = -p -X
-T $(LINUX).lds改为: <BR>ZLDFLAGS = -p -X -T vmlinux.lds
<BR>[说明]这各链接文件是为带mmu的板子准备的,生成带自解压的映像文件,由$(LINUX)控制,这里我们直接使用,也可以直接将这个链接文件改名为linux.lds.
<BR>8. ../linux-2.4.x /arch/armnommu/vmlinux-armv.lds.in <BR>找到
*(.got) /* Global offset table */ <BR>在其后加入: <BR>romfs_data = .;
<BR>romfs.o <BR>romfs_data_end = .; <BR>在这里注意格式,这三句话之前后缩进;
<BR>[说明]在这个连接文件中将romfs.o连接到.text section中。 <BR>9.
../linux-2.4.x/arch/armnommu/mm/proc-arm6,7.S <BR>mov r0, #0
<BR>#ifdef CONFIG_CPU_WITH_CACHE 改为: <BR>#ifdef
CONFIG_CPU_WITH_CACHE <BR>mov r0, #0
<BR>[说明]这里可能是careless的错误,对比旧版就可以理解。 <BR>10. ../linux-2.4.x
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -