uclinux移植 - CSDN
精华内容
参与话题
  • 四,移植 一,linux下的经常使用压缩解压缩命令 在linux下常见的压缩文件格式有tar gzip zip bzip2 compress等 首先对于tar格式的,压缩和解压缩方式例如以下 .tar 解压 #tar -xvf ...

    本节主要包含(ubuntu10.04)

    一,linux下的经常使用压缩解压缩命令

    二,环境建立

    三,内核编译

    四,移植


    一,linux下的经常使用压缩解压缩命令

    在linux下常见的压缩文件格式有tar   gzip    zip   bzip2    compress等

    首先对于tar格式的,压缩和解压缩方式例如以下

    .tar 解压  #tar -xvf file1.tar               压缩 #tar -cvf file1.tar 

    .tar.gz 解压  #tar -zxvf file1.tar         压缩 #tar -zcvf file1.tar 

    .tar.bz 解压  #tar -jxvf file1.tar         压缩 #tar -jcvf file1.tar 

    对于gzip格式的,压缩和解压缩方式例如以下

     .gz后缀的  解压  #gzip  -d  file1.gz        压缩 #gzip file1

    对于zip格式的,压缩和解压缩方式例如以下

     .zip后缀的  解压  #uzip    file1.zip       压缩 #zip file.zip file1 file2   file3

    对于bzip2格式的,压缩和解压缩方式例如以下

    .bz2          解压  #bunzip2 file.bz2       压缩 #bzip2 *



    二,环境建立

    首先要把交叉工具设置好(具体见上一篇文章,嵌入式开发环境建立)

    别人提供的(

    uClinux,下载地址:http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20051110.tar.gz
    交叉编译环境:http://www.uclinux.org/pub/uClinux/uclinux-elf-tools/arm-elf-tools-20030314.sh

    我用的是天祥提供的arm-elf-tools

    把光盘代码中的软件arm-elf-tools-20040427.sh 复制到
    linux 的根文件夹下运行./ arm-elf-tools-20040427.sh 结果出现+43错误

    (有人说#chmod 777 arm-elf-tools-20040427.sh后再运行就不出错不知道没试过

    解决的方法:

    #tail -n+43 arm-elf-tools-20040427.sh >> 1.tar.gz

    #tar -zxvf  1.tar.gz

    运行之后,在控制台中输入 arm-elf-gcc –v

    假设成功安装了就会出现版本比如2.95.3

    查看安装在了那里

    #which arm-elf-gcc 

    检查是否将路径增加PATH的方法:
    echo $PATH

    应该能看到我们的编译工具所在的路径


    然后准备好uclinux内核,我这里用的是2.4

    我是直接放到了home/wenzer/share目录下这个目录是和windows共享的

    所以比較方便

    解压
    #tar xvzf uClinux2.4.tar.gz

    然后等待编译

    三,内核编译

    进到我们刚解压的目录下,须要改动个文件

    #cd uClinux-dist
    #make mrproper

    等待》。。。

    (我的出现了一个错误被忽略了说缺少relase我忽略了这个提示)
    改动文件1

    #vi linux2.4.x/arch/armnommu/vmlinux-armv.lds.in


    在__sto__kallsyms = ,;
    *(.got)后面加上:
    romfs_data = .;
    romfa.o
    romfs_data.end = .;
    然后wq退出
    这一步假设不做,编译的时候会出错(等号两边都必须有空格)。


    (4510须要改动makefile

    #vi vendors/Samsung/4510B/Makefile

    在genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)的下一行增加
    arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
    然后wq保存退出

    )

    #make menuconfig

    出错了

    >> Unable to find the Ncurses libraries.
    >>
    >> You must have Ncurses installed in order
    >> to use 'make menuconfig'

    解决方法:

    运行命令: sudo apt-get install ncurses-dev 就可以!

    (ncurses 用于make menuconfig界面显示

    继续又一次make试试ok了进入了配置界面

    四,移植

    我把移植分成了四段,前三段配置最后一段生成镜像文件
    第一段:
    选择公司和产品

    退出保存
    中间会问你要不要IIC啊之类的一路回车无论
    等待...
    第二段:
    配置界面出现
    配置系统

    保存退出
    第三段
    配置界面三出现

    应用程序和busybox
    第四段
    生成镜像
     #make dep
     #make lib_only
    这一步会出错须要安装软件
    #apt-get install bison
    又一次#make lib_only

    接下来
     #vi config/.config
    然后将"CONFIG_USER_OLD_PASSWORDS=y"凝视掉"#CONFIG_USER_OLD_PASSWORDS=y"

     #make user_only
     #make romfs
     #make image
    假设这一步提示错误,无论他继续运行下一步
     #make
    这样就会在/image下生成我们想要的文件
    。ram结尾的能够直接在ram中执行
    image.rom是能够自解压的正是我们须要的烧写到flash中


    展开全文
  • uClinux移植概述

    2007-05-21 01:25:00
    uClinux移植概述作者:姜江E-mail:jznsmail@tom.comBlog:http://blog.csdn.net/jznsmail1.建立开发环境 作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin...
     uClinux移植概述
    作者:姜江
    E-mail:jznsmail@tom.com
    Blog:http://blog.csdn.net/jznsmail

    1.建立开发环境
        作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin软件包的支持。在这里我们选用的开发平台是Fedora Core 2,内核版本为2.4.x。在进行uClinux的移植和开发之前,我们需要建立系统的交叉编译环境,因为做为主机我们使用的是IA32体系结构的处理器,而开发板我们才用的是ARM体系结构的处理器。ARM平台的交叉编译工具可以从uClinux的官方网站获得(www.uclinux.org)。在这里我们采用的是arm-elf-tools-20030314.sh,该文件是一个自解压文件,可以直接执行程序安装。
        #./arm-elf-tools-20030314.sh
        如果不能执行该文件,则需要修改一下文件的可执行属性
        #chmod 755 arm-elf-tools-20030314.sh
        然后再执行程序的安装。可执行文件按会被默认安装在/usr/local/bin目录下。

    2.编译uClinux内核
        uClinux是一款支持无MMU单元的嵌入式操作系统,我们可以从其官方网站获取最新版本的内核文件(www.uclinux.org)。
        我们将下载的uClinux内核文件放入我们的工作目录(/home/jelly/kernel/),然后使用tar工具解压内核文件。
        $cd /home/jelly/kernel/
        $tar xvzf uClinux-dist-200xxxxx.tar.gz
        经过一段时间的解压后将在工作目录下会生成uClinux-dist文件夹。
        在编译内核之前我们首先要做的是配置内核,常用的配置方式有如下几种:
        make xconfig - X Windows图形界面的配置选项
        make menuconfig - Console图形界面的配置选项
        make config - 命令接口的配置选项
        在这里需要注意的是uClinux是不支持loadable modules的,因此应该取消对该模块的支持。

        $cd uClinux-dist/
        $make menuconfig

        配置你需要的选项,比如处理器类型,开发板类型,内核版本等。配置好之后选择Saving and Exiting保存退出。

        编译uClinux内核的常用选项有:
        make distclean
        该命令将清除以前编译时候产生的文件,包括.config文件,所有目标文件以及内核映象文件。

        make clean
        该命令与make distclean相似,也是清除之前编译时候产生的文件

        make dep 这个只需要在第一次编译的时候执行,为了是建立文件之间的依赖关系,make命令会根据这个依赖关系来确定哪些文件需要重新编译,哪些文件可以跳过。

        make lib_only
        编译uClibc库

        make user_only
        编译用户制定的应用程序,比如初始化进程init,bash,以及集成了很多常用工具的嵌入式软件包busybox。

        make romfs
        uClinux经常才用romfs(只读文件系统)来作为系统的根文件系统,所以首先需要将之前编译的很多应用程序以uClinux所需要的目录格式存放起来。比如将可执行文件放在bin目录下,将配置文件放在etc目录下。该命令执行后会在uClinux-dist目录下生成一个romfs的目录,并且将文件系统所需要的文件组织起来,以便之后生成fomfs的映象文件。

        make image
        生成romfs文件系统的映象文件,以及linux的映象文件。该linux的映象文件是elf格式的,是不能直接下载到开发板上执行的(里面包含了大量的调试信息,elf文件执行前的环境建立信息等内容。该文件可以使用arm-elf-objcopy工具来生成可以直接在RAM中执行的binary文件)。

        make linux
        执行该命令之后将生成linux内核文件。

        make zImage
        建立经过gzip算法压缩过的内核映象文件,通常zImage产生的内核映象文件无法超过512KB大小。

        make modules
        建立内核模块

        注:有些uClinux版本提供了更多的编译方式,比如make linux.bin。关于其他的编译方式可以参看内核源码目录里的Makefile文件。

        在介绍完常用的几个内核编译命令后,我们可以使用如下的几个命令来建立我们所需要的内核以及文件系统:
        make dep
        make clean
        make all

        这样在uClinux-dist/linux-2.x.x目录下会生成linux, System.map,在uClinux-dist/images/目录下会生成image.bin, linux.bin, image.ram, image.rom, romfs.img, linux.text, linux.data等文件。如果你编译过程中没有出现错误,但是没有我说的这些文件,你可以参看Makefile文件了解更多的东西。
        其中image.ram是直接可以下载到ram中执行的文件。在调试阶段我们就可以使用该文件。
        image.rom是一个zImage文件,可以自解压的内核,该文件需要少写到FLASH里,而不能直接放入RAM中执行。

    3.uClinux内核建立过程
        建立内核首先是建立单独的内核模块和内核子系统,一旦这些建立好了之后将通过连接文件将多个文件连接在一起。该连接文件一般在arch/$(ARCH)/$(PLATFORM)/$(BOARD)/$(MODEL).ld。连接器使用该连接文件生成linux文件:
        LD -T (MODUEL).ld crt0_$(MODUEL).o [objs] -o linux
        连接文件定义了内核如何组织内存段。

        System.map文件是通过linux文件产生的,用于调试使用。通过该文件可以方便的确定函数的位置。该文件是通过如下方式产生:
        NM $(LINUX) | grep -v '/(compiled/)/|/(/.o$$/)/|/(a/)' | sort > System.map

        linux.data文件是包含内核所有数据段的代码,是通过移除linux文件中所有只读段和其他不需要的段得到的,该文件可以通过arm-elf-objcopy来产生,如:
        OBJCOPY -O binary --remove-section=.romvec --remove-section=.text/
                          --remove-section=.ramvec --remove-section=.bss/
                          --remove-section.eram linux linux.data

        linux.text文件包含了所有文本段代码,是去除数据段后的代码
        OBJCOPY -O binary --remove-section=.ramvec --remove-section=.bss/
                          --remove-section-.data --remove-section=.eram/
                          --set-section-flags=.romvec=CONTENTS,ALLOC,LOAD,READONLY,CODE linux linux.text

        linux.bin文件,是可以实际载入内存中执行的文件,他的建立是通过linux.text和linux.data两个文件连接得到的,如:
        cat linux.text linux.data > linux.bin
        该文件只是内核,并没有包含文件系统。我们可以使用如下方式将文件系统和内核文件连接起来生成image.bin映象文件:
        cat linux.bin romfs.img > image.bin

    4.手工生成ROMFS文件系统
        建立ROMFS文件系统之前应该手工建立文件系统树,例如通常ROMFS包含如下目录:
        /bin /dev /etc /lib /proc /sbin /tmp /usr /var

        然后我们可以将交叉编译好的应用程序放入/bin目录中,之后使用genromfs工具来建立文件系统的映象,如:
        genromfs -v -V "ROM Disk" -f romfs.img -d romfs > romfs.map

        最后,可以与内核文件连接在一起,然后烧入Flash中。
        cat linux.bin romfs.img > image.bin

    5.参考文档
        《构建嵌入式LINUX系统》 O'REILLY
        《Linux How To》
        《Linux Documentation》

     
    展开全文
  • uClinux操作系统移植

    千次阅读 2008-07-05 17:11:00
    (复旦大学电子工程系沈沙,欢迎转载,转载时请保留此行作者信息)l uClinux简介l 硬件体系结构简介l 编译环境和编译工具。l uClinux启动过程l 系统源码的修改1. uClinux简介uClinux这个英文单词中u表示Micro...
    
    

    (复旦大学电子工程系沈沙,欢迎转载,转载时请保留此行作者信息) l uClinux简介 l 硬件体系结构简介 l 编译环境和编译工具。 l uClinux启动过程 l 系统源码的修改

    1. uClinux简介

    uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。

    uclinux是一个源码开放的操作系统,面向没有MMU(Memory Management Unit)的硬件平台。它是linux的一个变 种,主要的区别在于两者的内存管理机制和进程调度管理机制,同时为了适应嵌入式应用的需求,它的采用了romfs文件系统,并对linux上的c语言库 glibc做了简化。

    2. 硬件体系结构简介

    运行uClinux的硬件平台主要包括如下几个部分:cpu(ARMv4指令集兼容)、uart、memory controller、定时器、flash存储器,sdram存储器,中断控制器和DMA。

    3. 编译环境和编译工具。

    uclinux操作系统源码绝大部分是用c语言开发的,有一些与硬件直接相关的代码则用特定于某一CPU体系结构的汇编来实现。这些源码只能用GNU的gcc编译工具来进行编译、链接。

    GNU gcc可以运行于Linux/Unix操作系统上。如果要在Windows平台上运行gcc,则必须安装Cygwin。Cygwin可以在Windows中安装一个linux的运行环境,这样就可以在windows下运行原本只能在linux下运行的程序。

    为了在PC上编译得到运行于目标CPU上的操作系统内核,还必须安装一个合适的交叉编译器。Gcc 提供了现成的针对MIPS、ARM、M68K、 Sharc、PowerPC的交叉编译器。如果没有现成的交叉编译器,则需要自行设计。GNU网站提供了一些如何开发新的交叉编译器的文章。开发一个新的 编译器,一般需要如下几个步骤:

    1、编写机器描述脚本。采用gcc的RTL(Register Tansfer Language)语言描述针对某一CPU体系结构的机器指令与寻 址方式、CPU浮点处理方式、endianess、c语言中各种数据类型的位宽、寄存器的个数和使用规则、堆栈和函数调用规则等体系结构的细节。 2、设计代码生成器。Gcc在对c语言源文件进行了词法和语法分析后,将产生一种中间格式文件(intermediate representation)。为了把这种中间格式文件转化为针对具体CPU体系结构的机器码,需要自行设计一个代码生成器。 3、设计汇编器 4、设计链接器

    4. uClinux启动过程

    uClinux系统的启动可以分为两个步骤: 1. 运行bootloader初始化程序

    SRAM、SDRAM等存储设备属于挥发性的存储器,掉电以后其中的内容就会全部丢失,所以必须把操作系统的内核镜像存放在Flash等不挥发性存 储介质上。但是操作系统在运行时,需要动态的创建一些如数据段、堆栈、页表(针对使用虚拟地址的操作系统)等内容,所以需要在RAM中运行操作系统。因 此,就需要一个引导程序把操作系统的内核镜像从Flash存储器拷贝到RAM中,然后再从RAM中执行操作系统的内核。Bootloader就是可以完成 这样一种功能的程序。

    从本质上来讲,bootloader不属于操作系统内核。它采用汇编语言编写,因此针对不同的cpu体系结构,这一部分代码不具有可移植性。在移植操作系统时,这部分代码必须加以改写。

    具体来讲,bootloader在系统启动时主要完成以下几项工作: (1)     将操作系统内核从flash拷贝到sdram中,如果是压缩格式的内核,还要将之解压缩。 (2)     改写系统的memory map,原先flash起始地址映射为0地址,这时需要将RAM的起始地址映射为0。 (3) 设置堆栈指针并将bss段清零。将来执行c语言程序和调用子函数时要用到。 (4)     改变pc值,使得cpu开始执行真正的操作系统内核。 2. 运行操作系统内核 bootloader程序执行完上述的各项工作后,通过一条跳转指令,转而执行ini目录下c语言源文件main.c中的函数start_kernel()。因为在此之前bootloader已经创建好一个初始化环境, c函数可以开始执行了。整个操作系统内核的初始化工作从这里才算是真正开始。这个函数的长度比较短,代码如下:

    / asmlinkage void __init start_kernel(void) {  char * command_line;  unsigned long mempages;  extern char saved_command_line[];

    /*  * Interrupts are still disabled. Do necessary setups, then  * enable them  */  lock_kernel();  printk(linux_banner);  setup_arch(&command_line);  printk("Kernel command line: %s/n", saved_command_line);  parse_options(command_line);  trap_init();  init_IRQ();  sched_init();  softirq_init();  time_init();

     /*   * HACK ALERT! This is early. We're enabling the console before   * we've done PCI setups etc, and console_init() must be aware of   * this. But we do want output early, in case something goes wrong.   */  console_init(); #ifdef CONFIG_MODULES  init_modules(); #endif  if (prof_shift) {   unsigned int size;   /* only text is profiled */   prof_len = (unsigned long) &_etext - (unsigned long) &_stext;   prof_len >>= prof_shift;      size = prof_len * sizeof(unsigned int) + PAGE_SIZE-1;   prof_buffer = (unsigned int *) alloc_bootmem(size);  }

     kmem_cache_init();  sti();  calibrate_delay(); #ifdef CONFIG_BLK_DEV_INITRD  if (initrd_start && !initrd_below_start_ok &&    initrd_start < min_low_pfn << PAGE_SHIFT) {   printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "       "disabling it./n",initrd_start,min_low_pfn << PAGE_SHIFT);   initrd_start = 0;  } #endif  mem_init();  kmem_cache_sizes_init();  pgtable_cache_init();

     mempages = num_physpages;

     fork_init(mempages);  proc_caches_init();  vfs_caches_init(mempages);  buffer_init(mempages);  page_cache_init(mempages); #if defined(CONFIG_ARCH_S390)  ccwcache_init(); #endif  signals_init(); #ifdef CONFIG_PROC_FS  proc_root_init(); #endif #if defined(CONFIG_SYSVIPC)  ipc_init(); #endif  check_bugs();  printk("POSIX conformance testing by UNIFIX/n");

     /*    * We count on the initial thread going ok    * Like idlers init is an unlocked kernel thread, which will   * make syscalls (and thus be locked).   */  smp_init();  rest_init(); } /

    5. 系统源码的修改

    移植一个操作系统到新的硬件平台,比较好的办法是寻找一个架构相近并且已经做好操作系统移植的硬件平台。然后,对原先的操作系统做一定修改。系统源 码修改的工作量取决于自行设计的硬件平台与现有的硬件平台之间差异程度。此设计中的硬件平台与三星4510芯片较为接近,并且也可以下载到针对4510b 的uclinux系统源码。所以可以从此源码入手,根据我们的硬件平台与4510b的不同之处,在源码中找到相应的文件并加以修改。下面介绍如何修改系统 源码。

    需要修改的系统源码主要有如下几处: (1) bootloader相关代码。此代码位于/uClinux/linux-2.4.x /arch/armnommu/boot/compressed/目录下名为head.s的文件中。此处程序用汇编语言实现,需要修改的地方主要是设置 memory map的代码,与memory controller的硬件实现相关。 (2) UART相关代码。UART相关代码位于/uClinux/linux-2.4.x/drivers/char目录下的serial.c (3) 定时器相关代码。uClinux中有如下函数调用star_kernel()->time_init()->setup_timer(),需要修改setup_timer()函数中的相关代码。 (4) 中断控制器相关。/uClinux/linux-2.4.x/arch/armnommu/irq.c

    除了上述的代码,还有其他多处需要修改。在修改源代码时,可按照uclinux启动和执行顺序依次修改整个平台。熟悉linux内核源码结构对操作系统移植有很大帮助。

    作者:沈沙   来源:BIPLIP.com

    展开全文
  • uClinux移植概述

    2009-06-13 09:11:00
    1.建立开发环境 作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin软件包的支持。在这里我们选用的开发平台是Fedora Core2,内核版本为2.4.x。在进行uClinux的...

    1.建立开发环境
        作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin软件包的支持。在这里 我们选用的开发平台是Fedora Core 2,内核版本为2.4.x。在进行uClinux的移植和开发之前,我们需要建立系统的交叉编译环境,因为做为主机我们使用的是IA32体系结构的处理 器,而开发板我们才用的是ARM体系结构的处理器。ARM平台的交叉编译工具可以从uClinux的官方网站获得(www.uclinux.org )。在这里我们采用的是arm-elf-tools-20030314.sh,该文件是一个自解压文件,可以直接执行程序安装。
        #./arm-elf-tools-20030314.sh
        如果不能执行该文件,则需要修改一下文件的可执行属性
        #chmod 755 arm-elf-tools-20030314.sh
        然后再执行程序的安装。可执行文件按会被默认安装在/usr/local/bin目录下。

    2.编译uClinux内核
        uClinux是一款支持无MMU单元的嵌入式操作系统,我们可以从其官方网站获取最新版本的内核文件(www.uclinux.org )。
        我们将下载的uClinux内核文件放入我们的工作目录(/home/jelly/kernel/),然后使用tar工具解压内核文件。
        $cd /home/jelly/kernel/
        $tar xvzf uClinux-dist-200xxxxx.tar.gz
        经过一段时间的解压后将在工作目录下会生成uClinux-dist文件夹。
        在编译内核之前我们首先要做的是配置内核,常用的配置方式有如下几种:
        make xconfig - X Windows图形界面的配置选项
        make menuconfig - Console图形界面的配置选项
        make config - 命令接口的配置选项
        在这里需要注意的是uClinux是不支持loadable modules的,因此应该取消对该模块的支持。

        $cd uClinux-dist/
        $make menuconfig

        配置你需要的选项,比如处理器类型,开发板类型,内核版本等。配置好之后选择Saving and Exiting保存退出。

        编译uClinux内核的常用选项有:
        make distclean
        该命令将清除以前编译时候产生的文件,包括.config文件,所有目标文件以及内核映象文件。

        make clean
        该命令与make distclean相似,也是清除之前编译时候产生的文件

        make dep 这个只需要在第一次编译的时候执行,为了是建立文件之间的依赖关系,make命令会根据这个依赖关系来确定哪些文件需要重新编译,哪些文件可以跳过。

        make lib_only
        编译uClibc库

        make user_only
        编译用户制定的应用程序,比如初始化进程init,bash,以及集成了很多常用工具的嵌入式软件包busybox。

        make romfs
        uClinux经常才用romfs(只读文件系统)来作为系统的根文件系统,所以首先需要将之前编译的很多应用程序以uClinux所需要的目录格式存放 起来。比如将可执行文件放在bin目录下,将配置文件放在etc目录下。该命令执行后会在uClinux-dist目录下生成一个romfs的目录,并且 将文件系统所需要的文件组织起来,以便之后生成fomfs的映象文件。

        make image
        生成romfs文件系统的映象文件,以及linux的映象文件。该linux的映象文件是elf格式的,是不能直接下载到开发板上执行的(里面包含了大量 的调试信息,elf文件执行前的环境建立信息等内容。该文件可以使用arm-elf-objcopy工具来生成可以直接在RAM中执行的binary文 件)。

        make linux
        执行该命令之后将生成linux内核文件。

        make zImage
        建立经过gzip算法压缩过的内核映象文件,通常zImage产生的内核映象文件无法超过512KB大小。

        make modules
        建立内核模块

        注:有些uClinux版本提供了更多的编译方式,比如make linux.bin。关于其他的编译方式可以参看内核源码目录里的Makefile文件。

        在介绍完常用的几个内核编译命令后,我们可以使用如下的几个命令来建立我们所需要的内核以及文件系统:
        make dep
        make clean
        make all

        这样在uClinux-dist/linux-2.x.x目录下会生成linux, System.map,在uClinux-dist/images/目录下会生成image.bin, linux.bin, image.ram, image.rom, romfs.img, linux.text, linux.data等文件。如果你编译过程中没有出现错误,但是没有我说的这些文件,你可以参看Makefile文件了解更多的东西。
        其中image.ram是直接可以下载到ram中执行的文件。在调试阶段我们就可以使用该文件。
        image.rom是一个zImage文件,可以自解压的内核,该文件需要少写到FLASH里,而不能直接放入RAM中执行。

    3.uClinux内核建立过程
        建立内核首先是建立单独的内核模块和内核子系统,一旦这些建立好了之后将通过连接文件将多个文件连接在一起。该连接文件一般在arch/$(ARCH) /$(PLATFORM)/$(BOARD)/$(MODEL).ld。连接器使用该连接文件生成linux文件:
        LD -T (MODUEL).ld crt0_$(MODUEL).o [objs] -o linux
        连接文件定义了内核如何组织内存段。

        System.map文件是通过linux文件产生的,用于调试使用。通过该文件可以方便的确定函数的位置。该文件是通过如下方式产生:
        NM $(LINUX) | grep -v '/(compiled/)/|/(/.o$$/)/|/(a/)' | sort > System.map

        linux.data文件是包含内核所有数据段的代码,是通过移除linux文件中所有只读段和其他不需要的段得到的,该文件可以通过arm-elf-objcopy来产生,如:
        OBJCOPY -O binary --remove-section=.romvec --remove-section=.text/
                          --remove-section=.ramvec --remove-section=.bss/
                          --remove-section.eram linux linux.data

        linux.text文件包含了所有文本段代码,是去除数据段后的代码
        OBJCOPY -O binary --remove-section=.ramvec --remove-section=.bss/
                          --remove-section-.data --remove-section=.eram/
                          --set-section-flags=.romvec=CONTENTS,ALLOC,LOAD,READONLY,CODE linux linux.text

        linux.bin文件,是可以实际载入内存中执行的文件,他的建立是通过linux.text和linux.data两个文件连接得到的,如:
        cat linux.text linux.data > linux.bin
        该文件只是内核,并没有包含文件系统。我们可以使用如下方式将文件系统和内核文件连接起来生成image.bin映象文件:
        cat linux.bin romfs.img > image.bin

    4.手工生成ROMFS文件系统
        建立ROMFS文件系统之前应该手工建立文件系统树,例如通常ROMFS包含如下目录:
        /bin /dev /etc /lib /proc /sbin /tmp /usr /var

        然后我们可以将交叉编译好的应用程序放入/bin目录中,之后使用genromfs工具来建立文件系统的映象,如:
        genromfs -v -V "ROM Disk" -f romfs.img -d romfs > romfs.map

        最后,可以与内核文件连接在一起,然后烧入Flash中。
        cat linux.bin romfs.img > image.bin

    展开全文
  • 移植uClinux内核到stm32f407

    万次阅读 多人点赞 2017-03-20 15:57:56
    上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所以也要看到网上的资源其实...
  • 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板uclinux-2008r1-rc8 (移植到vdsp5)Visual DSP++ 5.0 欢迎转载,但请保留作者信息 在一些以模块方式提供的...
  • ucos 和uclinux的区别及各自的特点

    千次阅读 2016-01-20 19:26:54
    uc/os和uclinux操作系统是两种性能优良源码公开且被广泛应用的的免费嵌入式操作系统,可以作为研究实时操作系统和非实时操作系统的典范。本文通过对uc/os和uclinux的对比,分析和总结了嵌入式操作系统应用中的若干...
  • 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板uclinux-2008r1-rc8 (移植到vdsp5)Visual DSP++ 5.0 欢迎转载,但请保留作者信息 在include/asm/mach/black
  • uClinux的一些点

    千次阅读 2008-01-23 15:16:00
    uClinux内核简介 uCLinux 是Linux 2.0核心的分支,是针对没有MMU管理单元的微控制器 继承了Linux的大多数特性 多数的Linux下应用程序和驱动程序都可以在uClinux下运行 内核精简 Kernel Kernel+root 并入linux 2.6...
  • 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板uclinux-2008r1-rc8 (移植到vdsp5)Visual DSP++ 5.0 欢迎转载,但请保留作者信息 在include/asm/processor.
  • 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板uclinux-2008r1-rc8 (移植到vdsp5)Visual DSP++ 5.0 欢迎转载,但请保留作者信息所用的开发板上带了一片...
  • 本次移植的Target platform是武汉创维特公司(http://www.cvtech.com.cn)...整个移植的过程如下:1、获取uClinux-dist以root登录Red Hat,从教学实验板的附带光盘中拷贝uClinux-dist-jx44b0.tar.gz(使用的是uClinux
  • 移植librt库到uclinux

    千次阅读 2011-08-05 12:37:15
    最近一个ARM7+uClinux项目需用到定时器,但定时精度要求不是很高。所以想到了LibRT库。Librt库实现的POSIX 100b.3标准的定时器和消息队列接口,在Linux 2.6内核中已普遍支持,部分后期2.4内核版本也已补丁形式提供了...
  • nios II上移植uclinux功能参考网站

    千次阅读 2008-05-08 08:52:00
    http://uuu.enseirb.fr/~kadionik/embedded/uclinux/nios-uclinux.html这个网站就是uclinux移植到nios上的项目,先推荐一下。
  • ucLinux下sqlite数据库移植全攻略

    千次阅读 2004-12-16 16:57:00
    本文讨论的是比较流行的嵌入式开发组合ARM+uclinux,即目标开发板为三星S3C4510,完成sqlite在其uclinux上的移植。全文阅读:ucLinux下sqlite数据库移植全攻略
  • UClinux是一种优秀的嵌入式Linux版本。uClinux是Micro-Conrol-Linux的缩写。同标准Linux相比,它集成了标准Linux操作系统的稳定性、强大网络功能和出色的文件系统等主要优点。但是由于没有MMU(内存
  • UcOS-II 和linux比较

    千次阅读 2014-06-20 10:14:57
    随着现代计算机技术的飞速发展和互联网技术的广泛应用,从pc时代过渡到了以个人数字助理、手持个人电脑和信息家电为代表的3c(计算机、通信、消费电子)一体的后pc时代。后pc时代里,嵌入式系统扮演了越来越重要的角色...
  • mmu和虚存

    千次阅读 2006-12-06 15:30:00
    uClinux的嵌入 uClinux是专为无存储器管理单元(MMU)的微控制器打造的嵌入式Linux操作系统。uClinux首先被移植到摩托罗拉的MC68328 DragonBall集成微处理器上。从那以后, uClinux越来越受到业界的青睐, 被移植到更多...
  • uClinux移植Ne2000兼容的网卡驱动程序uClinux移植Ne2000兼容的网卡驱动程序(1)我是linux的新手,可以说从来没有在linux下写过程序,对于linux内核也是相当陌生,前一段时间,拿着tpu一个移植好了的uClinux在S3...
  • 快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板uclinux-2008r1.5-rc3(smp patch)Visual DSP++ 5.0(update 5) 欢迎
1 2 3 4 5 ... 20
收藏数 3,893
精华内容 1,557
热门标签
关键字:

uclinux移植