uclinux移植_stm32移植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操作系统移植

    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移植概述

    2008-02-20 16:20:00
    1.建立开发环境 作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin软件包的支持。在这里我们选用的开发平台是Fedora Core 2,内核版本为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

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

     
    展开全文
  • 上午一直在忙着整protel Dxp sp2,... 下午和晚上又进行了一次uclinux内核的移植,这一次用的是2004的内核,用的是他们提供的补丁,经过编译后,下栽到板子里,可以运行,但还是有问题的:在/usr下本来是可以下栽文件的,从新编

          上午一直在忙着整protel Dxp sp2,经过一个上午的重温,感觉有点意思了!下来还需要勤加练习,否者会忘的哦!!看来自己的单片机电路在这个星期是完成不了了!!唉!!只能到厂里继续想了 ^^.

         下午和晚上又进行了一次uclinux内核的移植,这一次用的是2004的内核,用的是他们提供的补丁,经过编译后,下栽到板子里,可以运行,但还是有问题的:在/usr下本来是可以下栽文件的,从新编译后,看不到了那些下栽的程序!这就不好办了哦!

        明天又要去厂了,带好书,好好的看看吧!时间不多哦!!

    展开全文
  • 上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所以也要看到网上的资源其实...
  • uClinux移植和分析(2)

    2008-01-21 16:30:00
    2007-12-25 09:26:36 printf和标准输出 上次写到main函数的参数传递.现在继续往下进行.最近忙实验室的事情,看了一周的文章,也没啥进展,周末写点技术贴,放松一下:-) 进入main函数后,就要调用printf("Hello ...
  • 历时两个星期,终于将uClinux移植于nios ii成功;激动的心情难以掩饰,高兴的同时,我希望记录下我的移植坎坷之旅:    首先我是按照真 OO无双的博客一步一步走下去的: file:///C:/Users/Frank/Desktop/(%E5...
  • 介绍了嵌入式操作系统相关知识后,以Microblaze处理器上进行uclinux移植为例,详细地展示了整个实验的开发流程。
  • uClinux的分析与移植

    2020-04-27 23:33:59
    uClinux的分析与移植 uClinux的分析与移植 uClinux的分析与移植 uClinux的分析与移植
  • uclinux移植遇到的问题

    2008-07-25 09:22:00
    根据上一篇文档《》介绍的方法,我对blackfin的uclinx进行了尝试进行“移植”(不算是移植,只能说按步骤抄写进去吧)。但是遇到了一些问题:1.ubuntu重起后,导致了出现“.dmrc”文件的错误,不能用我...
  • 着里边包括uclinux在STM32 上移植的中文步骤和英文步骤。英文的就是在st官方网站上有的。。
  • uclinux移植到lpc2294上串口出数据了,先记录下
  • 在STM32F10x大容量产品上移植uClinux,官方英文版文档
  • uClinux移植概述

    2007-05-21 01:25:00
    uClinux移植概述作者:姜江E-mail:jznsmail@tom.comBlog:http://blog.csdn.net/jznsmail1.建立开发环境 作为uClinux系统的移植和开发的主机最好使用Linux操作系统,如果选择Windows平台作为开发平台则需要Cygwin...
  • 由于参加的学校科研项目的需要,研究了uClinux系统在ARM7处理器上的移植,主要内容是uboot与uClinux移植。虽然网上有许多这方面的研究文章,不少书籍也有详细介绍,但是对于一些对移植工作至关重要的地址和步骤并...
  • uClinux移植

    2006-11-23 10:20:00
    发信人: leoo (888888), 信区: Unix_Linux标 题: uClinux移植发信站: BBS汕头大学郁金香站 (Fri Mar 14 13:16:45 2003), 转信uClinux移植 由于mClinux其实是Linux针对嵌入式系统的一种改良,其结构比较复杂,...
  • uClinux移植和分析(1)

    2007-01-20 13:29:00
    简介: 前一段时间,曾先后移植uClinux-2.0.x和uClinux-2.4.x的内核,我的移植基本上是从零做起,linux并没有支持该目标机的代码,所以这个移植工作基本上是新增加对一种目标机的支持。 工作过程中,我学到了...
  • arm 下uclinux仿真,平台 ads+keil
  • uClinux-dist-test-20051209编译步骤 1.1 交叉编译器 交叉编译器:arm-elf-tools-20040427.sh 安装方法请参考其它文档。 1.2 下载uClinux-dist-test-20051209.tar.gz 到uClinux网站下载uClinux-dist-test-20051209...
1 2 3 4 5 ... 20
收藏数 3,871
精华内容 1,548
关键字:

uclinux移植