什么是uclinux
uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。
uClinux是嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,与标准Linux在内存管理方面有着本质的区别。
uCLinux是一种优秀的嵌入式Linux版本,是micro-Controller-Linux的缩写。它秉承了标准Linux的优良特性, 经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式Linux。虽然它的体积很小,却仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。它专为嵌入式系统做了许多小型化的工作,目前已支持多款CPU。 其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。
uClinux下STM32开发环境搭建
一实验环境介绍:
目标板:STM3210E-EVAL
上位机操作系统:RedHatFedora 10
虚拟机:VMware 6.5
二、在开始搭建环境之前你需要三个压缩包:
1、IA32 GNU/Linux Installer :GNU工具安装包,你可以把它简单的理解为Windows下面的MDK或者IAR等编译环境。
2:这是Linux 2.26内核的源文件。可以理解为是在Windows下面我们要编写的文件的工程的源文件的一部分。
3、uClinux-dist-20080808-20090112.patch.gz:为了支持STM32的开发和加入一些源文件。可理解为在Windows下面我们要编写的文件的工程的源文件的另一部分。
第2个软件包加上第3个软件包就是我们在MDK和IAR下的工程源文件了。理所当然地就包含了timer.c lib.h等STM32的库文件了。
OK,接下为你地有一个在PC上跳的Linux操作系统,我这里安装的是Fedora 10 。安装过程这里就不作详细的介绍了,这一类教程网上都有。这里有一点需要注意一下的,就是硬盘的空间尽可能的大点,因为软件包2将占用2.6G左右的空间,而软件包1、3也会占几百M的空间。因此你在安装完Linux后到少要保证你的用户区的空间要不少于3G。
若你之前玩过S3C44B0X上面的uClinux且看了网上现在点击率最高的那套视频教程的话我想你大概会使用SSH建立一条从Window到虚拟Linux的通道。在这里我花点小时间说说一个我个人使用的方法:使用VMware自带的软件共享功能。
1、 Windows下,打开VMware。
2、 VM –》Settings…。
3、 在弹出介面中选择Options标签。
4、 选择Shared Folders.
5、 右边选择Always Enable
6、 右下角Add.。把你准备共享的Windows文件夹(一般为你存放那几个软件包的文件夹或盘)的路径(host path)添加进去。Name的话就是你在linux看到的文件夹的名称。
说到这里再提一下Hardware那里可以把串口,USB等添加进去。方便日后调试之用。
启动linux后你将会在/mnt/hgfs文件夹下看到你刚刚共享的文件夹。
三、把三个软件包拷贝到linux里面。找一个容易找到的地方安顿好它们。
(1)接下来安装GNU工具:
1、 运行终端
2、 使用cd命令进入那三个软件包所在的文件夹
3、 执行#./arm-2009q1-163-arm-uclinuxeabi.bin 运行第一个软件包
4、 运行一段时间后会弹出一个安装向导窗口,跟着你需要做的就只是像在windows下面安装软件那样安装它就好。基本上是一路next ,到了选择安装文件夹时你需要注意一下它的位置,以便日后查找,用于设置环境变量。
(2)解压第2个软件包可以点击右键解压也可以在终端中输入命令进行解压:(在软件包当前目录路径下运行)# tar –xjvf uClinux-dist-20080808.tar.bz2
由于这个包的文件比较多,所以需要一定的时间。解压后会生成一个uClinux-dist的文件夹。
(3)打补丁,patch第3个软件包。
在终端下运行:
#zcat uClinux-dist-20080808-20090112.patch.gz | patch -p1(上面的命令的前提条件是第2个包的安装路径和path软件包也是同时在当前目录下。)
若不在同一目录下,你必须先进入uClinux-dist文件夹。运行#zcat /路径/uClinux-dist-20080808-20090112.patch.gz | patch -p1上面路径:用你的第3个软件包的存放路径代替。
四、为STM3210E-EVAL配置uClinux
进入uClinux-dist文件夹。
运行#make menuconfig
进入目标板配置界面:
进入”Vendor/Product Selection”
uClinuxOnSTM32选择Vendor,
然后选择”STMicroelectionics”如图:
完成上述选择后会自动返回到上一界面。在上一界面选择:” STMicroelectionics Products”里面有两个选项:
“STM3210E-EVAL-jffs” 和“STM3210E-EVAL-MCU_Flash”
若选择“STM3210E-EVAL-jffs”则程序将从外部存储器中启动。而选择“STM3210E-EVAL-MCU_Flash”刚从内部FLASH中启动运行。从内部运行的是一个uClinux的微内核。是一个删减的版本。
在这里我们选择“STM3210E-EVAL-jffs”
然后回到最顶的菜单项。
进入Kernel / Library / Defaults Selection选项
第一项为”Kernal Version “ 选择内核版本。这里选择2.26版。
第二项为”libc Version” C库的版本,这里选择None.
第三项为“Default all settings”将默认厂商/产品的配置应用到内核。(为了将刚刚选择的ST的E板的信息和配置加进去,些项必选)。
第四项为“Customize Kernel Settings”用于自定义内核设置。(嵌入式的内核都是自己定制的,此项必选)。
第五项为“Customize Application/Library Settings”用于自定义添加到文件系统的应用。(可选择性地为板子添加若删除LED,LCE,串口等的应用,此项必选)。
第六项为“Update Default Vendor Settings”其功能为将当前修改的情况设置为默认版本。(由官方开发的模板应该是最好的,所以这项一般不选,当你做出比官方更好,更稳定的配置时,可将您自己的模板设置为默认模板,在这里,这一项就不选项了。)
退出当前配置,系统会提示你是否要保存。选择”YES”退出后,接下来将自动进入uCLinux的配置界面:完整的内核配置的详尽介绍(每一项的意义,内容很多)这里只介绍与E板相关的配置。
如图所示:
进入”System Type”
该目录内容如下:
“MMU-based … “ 因为STM32不具有MMU,此项跳过。
“ARM System type” ARM系统类型。进去后选择,基于STM32的ST板。
“STMicroelectionics,boards ”选项就只有一个选项了。选择之。
“Support ARMv7-M processors” 选择。
最重要的一项为设定内存的地址。
“Set flash/sram size and base addr”
这些都需要根据你的板子的情况而家它上面有内外部内在的基地址和大小,中断微量表的位置等的设置。
这一菜单配置完成后回到顶层菜单。
进入“Boot Options”菜单,
设置”Kernel Execute-In-Place from ROM”
这里设置的是程序执行的地址。
若程序是在外部存储器执行的话这里的地址就为0X6400 0000
若为内部FALSH执行刚为0X8000 0000
设置后返回,进入“Device Drivers” -》 “Character Device” -》 “Serial Drivers”。意思是到”设备驱动”-》”字符驱动”-》”串口驱动”菜单下选择对E板的串口支持,用于与板子的交互操作。
在此目录下选择:
[ * ] STM3210E-EVAL USART Port
[ *] Support for console on STM3210E-EVAL USART Port
选择后返回顶层菜单。选择”File System”“File systems” -》 “Miscellaneous File system”选择[ * ] Journalling Flash File System v2 (JFFS2)support 实现对JFFS2文件系统的支持。
完成后退出内核配置,自动进入应用设置。
如上图所示,选择”Miscellaneous Applications ”
选择: “STM3210E-EVAL Demo(s)”
菜单里面有几个已经做好的应用。都选上。
最后退出菜单,保存设置。
在编译刚刚所做的一切之前有一个很重要的步骤。就是把你的GNU工具的路径添加到环境变量中。不然的话直接make 的话就会找不到编译器。
执行export PATH$PATH:”你安装的GNU工具的路径”
添加完成后,就可以运行make就可以了。
一切顺利的话你将会在uClinux-dist/image目录下看到生成的三个映像文件。(如果是使用外部FLASH的话)
若使用的是内部的FLASH启动的微内核的配置的话就只会生成一个文件。而且生成的过程需要按以下的方式:
1、先运行make ucfront命令
2、再运行make user_only命令
3、跟着运行make romfs命令
4、最后运行make image命令,一切顺利的话,你将会在uClinux-dist/image目录下看到生成的映像文件。
最后将生成的影像文件拷贝回Windows,使用STM32的烧写软件Flash loader demonstrator将软件烧写进去就行了。