⑴ 如何搭建嵌入式开发的硬件环境
前言
首先,这个教程在仅使用附带的光盘镜像文件里的资料的情况下,所搭建的嵌入式 ARM 开发环境可以满足 ARM 核为 ARM920T 及 CORTEX-A8 的嵌入式开发需求。
其次,搭建针对处理器为 ARM920T 的开发环境步骤如下:
WINDOWS 系统:
1、 用 WINRAR 或 7zip 打开镜像文件 linux-dev.iso,将/WIN32/Daemon_Tools_4.46.1.328.exe 拖出来,
安装后运行;
2、 使用 Daemon 加载镜像文件 Linux-dev.iso 后,找到并双击/vmplayer/VMware-player-5.0.1-894247.exe 运行,安装完成;
3、 将/VMware-linux-tools.iso 复制到任何地方,譬如 D:\Virtual Machines\ 文件夹下;4、 将文件夹/Ubuntu 复制到电脑的任何地方,譬如 D:\Virtual Machines\ 文件夹下;
5、 打开 VMware Player,这是一个免费的软件,所以不需考虑不能使用的情况,更不需破解。效果图如下:
嵌入式开发环境的搭建
点击”Open a Virtual Machine”,找到刚才复制的 Ubuntu 文件夹,选中 Ubuntu.vmx 这个文件:
嵌入式开发环境的搭建
后点击打开;
6、 点击”Edit virtual machine settings”,这里需要注意的是,若你的电脑 CPU 是单核的,需将”Processors”由 2 设置为 1,否则,不能运行。选择”CD/DVD (IDE)”,之后点击右边的”Browse…”,找到并选择刚才复制的 VMware-linux-tools.iso,之后点击”Options”进入另一个设置界面;
7、 选择第三个”Shared Folders”,在右边将其设置为”Always enabled”,再点击下面的”Add…”,选择一个在硬盘上新建的空文件夹,譬如 D:\Virtual Machines\shared 文件夹,点击”Next》”,之后点击”Enable this share”,最后在设置主界面点击”OK”完成设置;
8、 将虚拟光驱加载的光盘中 Linux 文件夹中的所有文件都复制到上一步新建的空文件夹,譬如
D:\Virtual Machines\shared 文件夹下;
9、 在 VMware Player 下点击图标 以运行虚拟机 Linux,启动后可以看到桌面上有一个光盘的图标;
10、 在 Linux 桌面右键后选择”Open in terminal”,之后切换到/tmp 目录:cd /tmp ;11、 执行命令 tar zxf /media/cdrom0/VMwareTools-9.2.2-893683.tar.gz ,等待约一分钟后运行完毕;
12、 切换目录:cd 。/vmware-tools-distrib/ ;
13、 执行命令:sudo 。/vmare-install.pl ,用户”user”的密码为 redeem2012 ;
14、 下面出现很多问题,[yes]或[no],那么就可以一直点击键盘 ENTER 键选择默认设置,直至安装完成;15、 人,活着,要有耐心——这个过程稍长,显示最后两行为”Enjoy, --the WMware team”时就安装完成了;
16、 以上几个步骤如下:
嵌入式开发环境的搭建
17、 执行命令:sudo reboot 以重启;
18、 启动后在桌面右键选择”Open in terminal”,输入命令:cd /mnt/hgfs/shared ,当然若之前选择的空享空文件夹名称与 shared 不一样,可能不是这个目录,唉,管不了这么多了;19、 查看目当下文件如下:
嵌入式开发环境的搭建
20、 安装 libusb-1.0.9.tar.bz2,依次输入以下命令:tar jxf libusb-1.0.9.tar.bz2 、
cd libusb-1.0.9 、 。/configure --prefix=/usr 、 make 、 sudo make install ,注意最后一步需要输入密码 redeem2012,完了之后返回原目录: cd 。。/ ;21、 安装 readline-6.2.tar.gz,依次输入以下命令:tar zxf readline-6.2.tar.gz 、 cd readline-6.2 、。/configure --prefix=/usr 、 make 、 sudo make install ,完了之后返回原目录:cd 。。/ ;
22、 安装交叉编译器:sudo tar arm-linux-gcc-3.4.5.tar.bz2 -C /home ;
23、 更改环境变量:gedit /home/user/.profile ,在最后一行添加这么一句:export PATH=$PATH:/home/user/gcc-3.4.5-glibc-2.3.6/bin ,保存后退出
24、 切换回用户主目录:cd ~ ;
25、 执行命令:tar jxf /mnt/hgfs/shared/JLink_Linux_V422.tar.bz2 ;
26、 依次执行以下命令:cd JLink_Linux_V422/ 、 sudo cp libjlinkarm.so.* /usr/lib ,现在就可以
运行 JLink 了: sudo 。/JLinkExe ,但要注意这么一点:由于现在运行的是 windows 系统下的虚拟机, Linux 操作系统无法访问到 JLink,那么就需要按下图所示选择将连接到电脑的 JLink 直接送给虚拟机中运行的 Linux。我没有 JLink,所以下图中没有,你需要自己选择硬件并点击箭头后再点击”connect”:
嵌入式开发环境的搭建
另外,下面需要安装 minicom,也需要按上图将串口连接到 Linux 操作系统;
27、 这一步安装minicom。将虚拟机文件夹 Ubuntu 下的 minicom_2.3-1ubuntu2_i386.deb 复制到shared文件下,之后执行命令:sudo dpkg --install /mnt/hgfs/shared/ minicom_2.3-1ubuntu2_i386.deb
到这一步,windows 系统下的嵌入式 ARM 开发环境搭建完成了。重启一下更好。
至于 Linux 系统下的配置,这要复杂得多,因为系统情况完全不一样,因而,这里不再给出,当然,所有的软件也跟上面的完全一样。
另外,minicom、JLink 的配置和使用,这里就不说了,自己到网上去找吧,若搞不好,就当自虐了。反正我已经送佛到西了,整个过程不需要仍何网络,不需要上网
所附的光盘镜像文件中还有一些 windows 下的软件,如 SecureCRT、arm-none-linux-gcc 等,这些也能用到,只不过我没那个心情讲更多了,以上的配置已经完全足够了。
网络是个好东西,没有网络,就没有 LINUX,也没有快速学习的条件。所以——现在,自学去吧。
⑵ 用IAR嵌入式编译程序,“section=”是什么意思
#pragma section( "section-name" [, attributes] ) 作用是由程序指定创建一个段x0dx0a一般默认段都是由编译器自动指定的 不过看你这样的写法 IAR的时候是没有默认段的 必须由编写者手动指定x0dx0a比如#pragma section = ".data"就是创建一个名字为.data的段,x0dx0a然后下面调用x0dx0adata_ram = __section_begin(".data");x0dx0a来获取这个段的首地址以备其操作x0dx0a其他类似x0dx0a关于pragma section的详细说明如下。 对于#pragma 预处理还有很多功能 感兴趣可以自行搜索x0dx0a==================================================================================x0dx0a#pragma section。创建一个段。x0dx0a其格式为:#pragma section( "section-name" [, attributes] )x0dx0asection-name是必选项,用于指定段的名字。该名字不能与标准段的名字想冲突。可用/SECTION查看标准段的名称列表。x0dx0aattributes是可选项,用于指定段的属性。可用属性如下,多个属性间用逗号(,)隔开:x0dx0aread:可读取的x0dx0awrite:可写的x0dx0aexecute:可执行的x0dx0ashared:对于载入该段的镜像的所有进程是共享的x0dx0anopage:不可分页的,主要用于Win32的设备驱动程序中x0dx0anocache:不可缓存的,主要用于Win32的设备驱动程序中x0dx0adiscard:可废弃的,主要用于Win32的设备驱动程序中x0dx0aremove:非内存常驻的,仅用于虚拟设备驱动(VxD)中x0dx0a如果未指定属性,默认属性为read和write。x0dx0a在创建了段之后,还要使用__declspec(allocate)将代码或数据放入段中。x0dx0a例如:x0dx0a//pragma_section.cppx0dx0a#pragma section("mysec",read,write)x0dx0aint j = 0;x0dx0a__declspec(allocate("mysec"))x0dx0aint i = 0;x0dx0aint main(){}x0dx0a该例中, 创建了段"mysec",设置了read,write属性。但是j没有放入到该段中,而是放入了默认的数据段中,因为它没有使用__declspec(allocate)进x0dx0a行声明;而i放入了该段中,因为使用__declspec(allocate)进行了声明。
⑶ 嵌入式linux系统开发的具体步骤
第一步、建立交叉编译环境
没有交叉开发经验的读者,可能一时很难接受这个概念。首先,要明白两个概念:一般
我们工作的机器,称为开发机、主机;我们制作好的系统将要放到某台机器,如手机或另一
台PC机,这台机我们称为目标主机。
我们一般开发机上已经有一套开发工具,我们称之为原生开发套件,我们一般就是用它
们来写程序,那么,那什么又是交叉编译环境呢?其实一点也不神秘,也就是在开发机上再
安装一套开发工具,这套开发工具编译出来的程序,如内核、系统工作或者我们自己的程序,
是放在目标主机上运行的。
那么或许有初学者会问,直接用原生开发工具为目标主机编译程序不就完了?至少我当
初是这么想的。一般来说,我们的开发机都是X86 平台,原生开发套件开发的工具,也针
对X86 平台,而我们的目标主机可能是PowerPC、IXP、MIPS……所以,我们的交叉编译
环境是针对某一类具体平台的。
一般来讲,交叉开发环境需要二进制工具程序、编译器、C链接库,嵌入式开发常用的
这三类软件是:
Binutils
Gcc
uClibc
当然,GNU包含的工具套件不仅于此,你还要以根据实际需要,进行选择
第二步、编译内核
开发工具是针对某一类硬件平台,内核同样也是。这一步,我们需要用第一步中建立的
工具,对内核进行编译,对于有内核编译经验的人来说,这是非常简单的;
第三步、建立根文件系统
也就是建立我们平常看到的bin、dev、proc……这一大堆目录,以及一些必备的文件;
另外,我们还需要为我们的目标系统安装一些常用的工具软件,如ls、ifconfig……当然,
一个办法是找到这些工具的源代码,用第一步建立的交叉编译工具来编译,但是这些软件一
是数量多,二是某些体积较大,不适合嵌入式系统,这一步,我们一般都是用busybox来完
成的,包括系统引导软件init;
最后,我们为系统还需要建立初始化的引导文件,如inittab……