⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uclinux

📁 本书讲叙了移植uclinux的三步骤,很容易理解
💻
📖 第 1 页 / 共 5 页
字号:
                  height=13 alt=收藏夹 hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_groups.gif" 
                  width=12 border=0>收藏夹</A>&nbsp;&nbsp; <A class=mainmenu 
                  href="http://www.gzlinux.org/forum/topics_anywhere.php"><IMG 
                  height=13 alt="Rss Sync" hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_groups.gif" 
                  width=12 border=0>Rss Sync</A>&nbsp;&nbsp; &nbsp;<A 
                  class=mainmenu 
                  href="http://www.gzlinux.org/forum/profile.php?mode=register"><IMG 
                  height=13 alt=注册 hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_register.gif" 
                  width=12 border=0>注册</A></SPAN>&nbsp; </TD></TR>
              <TR>
                <TD vAlign=top noWrap align=middle height=25><SPAN 
                  class=mainmenu>&nbsp;<A class=mainmenu 
                  href="http://www.gzlinux.org/forum/profile.php?mode=editprofile"><IMG 
                  height=13 alt=个人资料 hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_profile.gif" 
                  width=12 border=0>个人资料</A>&nbsp; &nbsp;<A class=mainmenu 
                  href="http://www.gzlinux.org/forum/privmsg.php?folder=inbox"><IMG 
                  height=13 alt=登陆查看您的站内信件 hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_message.gif" 
                  width=12 border=0>登陆查看您的站内信件</A>&nbsp; &nbsp;<A class=mainmenu 
                  href="http://www.gzlinux.org/forum/login.php"><IMG height=13 
                  alt=登陆 hspace=3 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_mini_login.gif" 
                  width=12 
        border=0>登陆</A>&nbsp;</SPAN></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
      <TABLE cellSpacing=2 cellPadding=2 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=bottom align=left colSpan=2><A class=maintitle 
            href="http://www.gzlinux.org/forum/viewtopic.php?t=846&amp;start=0&amp;postdays=0&amp;postorder=asc&amp;highlight=">uclinux的移植三步曲(第二步)</A><BR><SPAN 
            class=gensmall><B></B><BR>&nbsp; </SPAN></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=2 cellPadding=2 width="100%" border=0>
        <TBODY>
        <TR>
          <TD vAlign=bottom noWrap align=left><SPAN class=nav><A 
            href="http://www.gzlinux.org/forum/posting.php?mode=newtopic&amp;f=44"><IMG 
            alt=发表新帖 
            src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/post.gif" 
            align=middle border=0></A>&nbsp;&nbsp;&nbsp;<A 
            href="http://www.gzlinux.org/forum/posting.php?mode=reply&amp;t=846"><IMG 
            alt=回复帖子 
            src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/reply.gif" 
            align=middle border=0></A></SPAN></TD>
          <TD vAlign=center align=left width="100%"><SPAN 
            class=nav>&nbsp;&nbsp;&nbsp;<A class=nav 
            href="http://www.gzlinux.org/forum/index.php">Guangzhou Linux 
            Consortium 首页</A> -&gt; <A class=nav 
            href="http://www.gzlinux.org/forum/viewforum.php?f=44">嵌入式Linux</A></SPAN></TD></TR></TBODY></TABLE>
      <TABLE class=forumline cellSpacing=1 cellPadding=3 width="100%" 
        border=0><TBODY>
        <TR align=right>
          <TD class=catHead colSpan=2 height=28><SPAN class=nav><A class=nav 
            href="http://www.gzlinux.org/forum/viewtopic.php?t=846&amp;view=previous">阅读上一个主题</A> 
            :: <A class=nav 
            href="http://www.gzlinux.org/forum/viewtopic.php?t=846&amp;view=next">阅读下一个主题</A> 
            &nbsp;</SPAN></TD></TR>
        <TR>
          <TH class=thLeft noWrap width=150 height=26>作者</TH>
          <TH class=thRight noWrap>留言</TH></TR>
        <TR>
          <TD class=row1 vAlign=top align=left width=150><SPAN class=name><A 
            name=2956></A><B>minian_007</B></SPAN><BR><SPAN 
            class=postdetails><BR><BR><BR>注册时间: 2004-03-16<BR>帖子: 
            43<BR></SPAN><BR></TD>
          <TD class=row1 vAlign=top width="100%" height=28>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD width="100%"><A 
                  href="http://www.gzlinux.org/forum/viewtopic.php?p=2956#2956"><IMG 
                  title=帖子 height=9 alt=帖子 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_minipost.gif" 
                  width=12 border=0></A><SPAN class=postdetails>发表于: Tue Mar 23, 
                  2004 9:33 pm<SPAN class=gen>&nbsp;</SPAN>&nbsp; &nbsp;发表主题: 
                  uclinux的移植三步曲(第二步)</SPAN></TD>
                <TD vAlign=top noWrap><A 
                  href="http://www.gzlinux.org/forum/posting.php?mode=quote&amp;p=2956"><IMG 
                  title=引用并回复 alt=引用并回复 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_quote.gif" 
                  border=0></A> </TD></TR>
              <TR>
                <TD colSpan=2>
                  <HR>
                </TD></TR>
              <TR>
                <TD colSpan=2><SPAN class=postbody>第二步:编译内核 
                  <BR><BR>建立好了开发环境,接下来要做的当然就是根据你的硬件环境编译原程序. <BR>在这里呢就有两种方法 
                  <BR><BR>第一种: 就是直接用dist来作.这种方法比较简单,比较适合初学者和对makefile不 <BR>熟的同志. 
                  <BR>首先就是进入uClinux-dist目录(在第一步中巳做解释),你可以看到很多目 
                  <BR>录,比如config;Documentation;freeswan;lib;linux-2.0.x;linux-2.4.x; 
                  <BR>uClib;user;vendor;romfs;images 
                  <BR>config:这个目录下是一些配置信息,在make config 的时候会用到里面的 
                  <BR>mkconfig这个文件,比如选择vendor,选择内核版本(2.4还是2.0) 
                  <BR>就在这个里面做的.然后在根目录下生成config.in文件. <BR>Documentation:这里是一些帮助信息 
                  <BR>lib:库文件 <BR>uClib:也是库文件,不过比lib小,一般嵌入式linux都用它 
                  <BR>linux-2.0.x:2.0版的内核 <BR>linux-2..4.x:2.4版的内核 
                  <BR>user:这里面放一些用户程序 <BR>romfs:放的是romfs的目录架构,在这里用的文件系统是romfs 
                  <BR>images:这里存放最后的执行印象和romfs印象 <BR><BR>好,下面再来看一下怎么样编译 
                  <BR>一般是遵循以下步骤 <BR>make config <BR>make dep <BR>make clean 
                  <BR>make lib_only(可以仅1次,不必要每次都来) <BR>make 
                  user_only(每次修改过您的应用程序之后,这一步后面的都必须重 <BR>来) <BR>make romfs 
                  <BR>make image <BR>make <BR>当你在做make config 
                  的时候注意要选择你芯片的型号比如(SamSung- <BR>4510) <BR>然后以后的工作几乎都是自动完成的了. 
                  <BR><BR>另外,就是可能你自己需要根据你自己的板子,选择ram的位置,还有linux开始 <BR>执行的地址, 
                  <BR>这几项内容分别在 
                  <BR>ram,rom的位置在linux-2.4.x/arch/ARCH/config.in(ARCH表示相应的 
                  <BR>处理器,比如arm,i386)里面设置,你在linux-2.4.x/arch/ARCH/makefile 
                  <BR>里面会看到下类下面的句子 <BR>if [ "$CONFIG_ARCH_SAMSUNG" = "y" ]; then 
                  <BR>define_bool CONFIG_NO_PGT_CACHE y <BR>define_bool 
                  CONFIG_CPU_32 y <BR>define_bool CONFIG_CPU_26 n 
                  <BR>define_bool CONFIG_CPU_ARM710 y <BR>define_bool 
                  CONFIG_CPU_WITH_CACHE y <BR>define_bool 
                  CONFIG_CPU_WITH_MCR_INSTRUCTION n <BR>define_bool 
                  CONFIG_SERIAL_SAMSUNG y <BR>define_hex DRAM_BASE 0x00000000 
                  <BR>define_hex DRAM_SIZE 0x00800000 <BR>define_hex 
                  FLASH_MEM_BASE 0x01000000 <BR>define_hex FLASH_SIZE 0x00200000 
                  <BR>fi <BR>其中DRAM_BASE,和DRAM_SIZE表示ram的起始地址和大小,你可以做相应 <BR>的改变. 
                  <BR>然后在linux-2.4.x/arch/ARCH/makefile里面会看到下面的语句 <BR>TEXTADDR = 
                  0x00008000 <BR>TEXTADDR就是linux执行的开始位置啦. 
                  <BR><BR>另外可能就是要设置串口的波特率啦,这个设置视不同的芯片而定,不过一般 
                  <BR>来说修改/linux-2.4.x/driver/char/serial_XXX.c文件,这里不同的芯片,会 
                  <BR>有不同的serial文件 <BR><BR>第二种方法:直接用原包来做 
                  <BR>这种方法会比较烦一点,不过会让你对整个过程更加清晰 <BR>下面是一个网友写的文章我把它贴出来 
                  <BR><BR><BR><BR>s3c44b 0x + uclinux2.4.19移植过程 
                  <BR><BR>终于看到一点结果了... <BR><BR>首先很感谢tpu, coldwind等给的帮助. 
                  <BR>第一次做这个,很多概念都是在这里得到各位的帮助. <BR>至今为止还有很多概念问题,没搞清楚,以后多多指教. 
                  <BR><BR>附件里是,我参考过的两篇文档. <BR>但是tpu曾建议不要用dist来做,直接用纯的linux源码包来做, 
                  <BR>我后来也是用linux源码包来做的. <BR>个人也倾向于直接用linux kernel源码包来做,这样更清晰, 
                  <BR>就是Makefile也清楚很多倍. <BR>而,romfs我是用dist的包来做的. 
                  <BR><BR>下面附带,我移植过程中的一些问题,有点象日志,呵呵 
                  <BR>但愿对后面的初学者有点用吧,(总要回报点给论坛<IMG alt=Smile 
                  src="Guangzhou Linux Consortium  阅读主题 - uclinux的移植三步曲(第二步).files/icon_smile.gif" 
                  border=0>,就怕质量太差) <BR><BR>1. tar xvzf linux-2.4.19.tar.gz 
                  <BR>2. patch uclinux <BR>3. patch s3c44b0x(from tpu) <BR>4. 
                  修改$topdir/Makefile中使 <BR>arch:=armnommu 
                  <BR>CROSS_COMPILE:=arm-elf- <BR>5. 
                  修改$topdir/arch/armnommu/config.in 
                  <BR>============修改=========== <BR>if [ "$CONFIG_ARCH_S3C44B0" 
                  = "y" ]; then <BR>define_bool CONFIG_NO_PGT_CACHE y 
                  <BR>define_bool CONFIG_CPU_32 y <BR>define_bool CONFIG_CPU_26 
                  n <BR>define_bool CONFIG_CPU_ARM710 y <BR>define_bool 
                  CONFIG_CPU_WITH_CACHE y <BR>define_bool 
                  CONFIG_CPU_WITH_MCR_INSTRUCTION n <BR>define_hex DRAM_BASE 
                  0x0c000000 <BR>define_hex DRAM_SIZE 0x00800000 
                  要修改dram和flash的大小 <BR>define_hex FLASH_MEM_BASE 0x00000000 
                  <BR>define_hex FLASH_SIZE 0x00200000 <BR>fi <BR>============ 
                  <BR>6.make menuconfig <BR>make dep <BR>make Image 注意关于Image 
                  zImage的make选项并不在$TOPDIR/Makefile中 <BR><BR>而是这样 
                  <BR>$TOPDIR/Makefile中 include arch/$(ARCH)/Makefile 
                  <BR>而arch/$(ARCH)/Makefile中 <BR>由MAKEBOOT对Image zImage等进行处理 
                  <BR>MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot LINUX=$(LINUX) 
                  <BR><BR>所以,根本上是在arch/$(ARCH)/boot/Makefile中对make Image处理的 
                  <BR><BR>7. <BR>ARCH/ARMNOMMU/MAKEFILE <BR>定义了 
                  <BR>PROCESSOR为armv (32位的)。 <BR>定义了 <BR>HEAD := 
                  arch/armnommu/kernel/head-$(PROCESSOR).o \ 
                  <BR>arch/armnommu/kernel/init_task.o <BR><BR><BR>TEXTADDR 
                  决定KERNEL起始运行地址,即IMAGE应DOWN到的位置 
                  <BR><BR>ARCH/ARMNOMMU/BOOT/MAKEFILE <BR>ZREALADDR 
                  决定KERNEL解压后数据输出的地址,同1 <BR>ZTEXTADDR 
                  带BOOTLOADER的压缩内核文件烧入FLASH的起始地址,即从哪个位置开始执行 
                  <BR>BOOTLOADER,若启动时直接执行,将其设为0,若自带BIOS可以跳到你想要的地址,可改为你要的位置。 
                  <BR><BR>8.image的组成(其中HEAD见7中) <BR>$(LINUX): 
                  include/linux/version.h $(CONFIGURATION) init/main.o 
                  init/version.o init/do_mounts.o linuxsubdirs <BR>$(LD) 
                  $(LINKFLAGS) $(HEAD) init/main.o init/version.o 
                  init/do_mounts.o \ <BR>--start-group \ <BR>$(CORE_FILES) \ 
                  <BR>$(DRIVERS) \ <BR>$(NETWORKS) \ <BR>$(LIBS) \ 
                  <BR>--end-group \ <BR>-o $(LINUX) 
                  <BR><BR>9.启动文件/arch/armnommu/kernel/head-armv.S 
                  <BR><BR>ID检查问题。在head-armv.S应加入对MACH_TYPE的设定。在uClinux启动时,首先会检查CPU的ID和平台的TYPE,如果不对会陷入死循环。在TPU的Patch中,加入了对CPU 
                  ID的设定,但没有加入对平台类型的设定。平台类型可能是应该从BootLoader中设好传进来,但对我们自已的BootLoader,没有完成此设定,所以应把MACH_TYPE(178)设到r1寄存器。否则,在系统调用lookup_architecture_type之后就没戏了。修改如下: 
                  <BR>mov r1, #178 ;《==此句为新加的 <BR>mov r0, #F_BIT | I_BIT | 
                  MODE_SVC @ make sure svc mode <BR>msr cpsr_c, r0 @ and all 
                  irqs disabled <BR><BR>10.vectors_base 
                  <BR>在include/asm-armnommu/proc-armv/system.h中定义 
                  <BR>在arch/armnommu/kernel/traps.c fiq.c 和sys_arm.c使用 
                  <BR><BR>fiq.c中 <BR>#define FIQ_VECTOR (vectors_base() + 0x1c) 
                  <BR><BR>11.pc行为 <BR>(指令地址4) add pc,pc,0xc000000 
                  <BR>结果会跳转到0xc00000c <BR>为什么不是8呢? 
                  <BR>arm7用的是3级流水线,程序计数器pc必须在当前指令前计数. 
                  <BR>所以指令在第一个周期必须为下一条指令取指pc+=4. <BR>所以在执行周期前,pc+=8了. <BR>所以add 
                  pc,pc,0xc000000 在执行的时候是(4+8+0xc000000). <BR><BR>12.设计 
                  <BR>bootloader 在flashrom中0x0-0x1000段 <BR>kernel 
                  image在flashrom中0x1000-0x1fffff段 <BR>由bootloader把kernel 
                  image从rom0x1000中拷到ram0xc000000处 <BR>irq vector 在ram 0xc7fff00 
                  - 0xc7fffff段 <BR>在bootloader中_ISR_STARTADDRESS 指定. <BR>在kernel 
                  中由vectors_base指定. <BR><BR>==修改 <BR>arch/armnommu/Makefile中 
                  <BR>TEXTADDR 决定KERNEL起始运行地址,即IMAGE应DOWN到的位置0xc000000 <BR>==修改 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -