
创建两个 VHD,一个 UEFI 能访问的 VHD,存放 USB Mass Storage DXE 驱动模块大小 16MB 足矣,下文称为 hdd.vhd(如果能够把驱动模块集成到 UEFI 里面,这个 VHD 可以省略)。以及一个实际安装系统的 VHD,下文蔽逗称为 usb.vhd大小 32-64GB 足够了,毕竟这也只能作为实验。接着挂载 hdd.vhd 文件,然后创建分区并格式化为 FAT32 格式,放入 USBMassStorageDxe_arm64.efi 模块文件,然后卸载 VHD。挂载 usb.vhd,使用 GPT 分区表,创建 ESP 和安装系统的分区 ESP 使用 FAT32 格式,大小 100MB,安装系统的分区使用 NTFS,占剩下的空间给这两个分区分配盘符,下文假设 ESP 为 S:,系统安装分区为 W:然后使用 dism 将系统 ISO 的 install.wim 恢复到 W: 假设 ISO 挂载到 G:,恢复的映像ID为4(一般4是 Pro,具体的ID请使用dism/get-wiminfo 查看)。
将Linaro UEFI的QEMU_EFI.fd复制到一个方便的位置,然后用以下命令启动QEMU ARM64模拟器。模拟器启动之后,按ESC进入UEFI的设置菜单,选择Boot Manager,选择最下面的EFl Internal Shell,进入EFI Shell,然后应该可以看到 hdd.vhd的分区FSO,键入以下命令加载USB Mass Storage 驱动,这时应该能看到一个FS0:和一个FS1:,一般usb.vhd的ESP会渣辩分配到FSO:,所以我们进入启动就如并缺可以了。
1. 安装标准的C开发环境,由于Linux安装默认是不安装的,所以需要先安装一下(如果已 经安装好的话,就可以免去这一伍早渗步了):#sudo apt-get install gcc g++ libgcc1 libg++ make gdb
2. 下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下,我把它下载到了我的个人文件夹 里 /home/wrq
arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下:
3. 解压腔脊 arm-linux-gcc-3.4.1.tar.bz2
#tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将 arm文件夹拷贝到/usr/local/下
# cd usr/local/
#cp -rv arm /usr/local/
现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了
4. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一)
方法一:修改/etc/bash.bashrc文件
#vim /etc/bash.bashrc
在最后加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
方法二:修改/etc/profile文件:
# vim /etc/profile
增加路径设置,在末尾添加如下,保存/etc/profile文件:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin
注:(这只能在当前的终端下才是有效的!)
5. 立即使新的环境变量生效,不用重启电脑:
对应方法一:#source /root/.bashrc
对睁衫应方法二:# source /etc/profile
6. 检查是否将路径加入到PATH:
# echo $PATH
显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。
(本文地址:)
7. 测试是否安装成功
# arm-linux-gcc -v
上面的命令会显示arm-linux-gcc信息和版本,这是我显示的信息:
Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs
Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc- 3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu
--prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm
-linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable
-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable- languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
8.编译Hello World程序,测试交叉工具链
写下下面的Hello World程序,保存为hello.c
#include <stdio.h>
int main()
{
printf("Hello World!\n")
return 0
}
执行下面的命令:
# arm-linux-gcc -o hello hello.c
步骤:
1.找到arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
2.解压当前目录,找到arm-linux-gcc的路径复制下来,进入.bashrc中修改成
加入一行export PATH=$PATH://home/haoyue/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/bin
3.退出后重新进入终端$arm-linux-gcc --v 查看版本号,能看到就成功了。
4.$kermit
5.连接板子,如果不行先按c
6.连接成功后loadb,然后按ctrl+\ 再按c, 最后send app.bin文件
7.上步成功后再按c 然后go 0x21000000(默认地址)。
摘抄自朱友鹏嵌入式视频教程。linux中装软件的特点
linux中安装软件比windows中复杂。linux中安装软件一般有以下几种方法:
第一种:在线安装。譬如ubuntu中使用apt-get install vim来安装vim软件。
第二种:自己下载安装包来安装。这源吵埋种方式的缺陷就是你不知道你下载的安装包和你的系统是否匹配。
第三种:最装逼的一种方式,就是源代码安装。碰祥
总结:我们安装交叉编译工具链(arm-linux-gcc)实际采用第二种安装方式。
交叉编译工具链的选择
我们选择交叉编译工具链的原则:和我们所使用的目标平台(给哪款SoC编程)尽量去匹配。譬如我们开发S5PV210的程序就是用arm-2009q3这个版本,因为三星官方在开发S5pv210时就使用这个版本的交叉编译工具链,这样可以最大限度的避免稀奇古怪的问题出现。
交叉编译工具链的安装
步骤1:打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹
步骤2:先将安装包从Windows中弄到linux中去。可以用共享文件夹,也可以用Samba,也可以cuteftp。
步骤3:解压。tar -jxvf arm-2009q3.tar.bz2
到此相当于程序已经安装完毕,真正的应用程序安装在/usr/local/arm/arm-2009q3/bin目录下
注:linux中的目录管理方法。技术角度来讲,linux中所有目录性质都是一样的,所以技术角度来讲我们把软件安装到哪里都行。但是因为如果胡乱放置,将来程序可能不好找。所以久而久之大家就总结了一个文件放置的一般定义,譬如说/bin目录放置一些系统自带的用户使用的应用程序,/sbin目录下存放的是系统自带的系统管理方面的应用程序。
那我们装软件放在哪里?一般都在/usr目录下。我们安装arm-linux-gcc,就在/usr/local/底下创建一个arm文件夹,然后装到里面。
安装后的测试
到真正的应用程序的安装目录下(也就是/usr/local/arm/arm-2009q3/bin),去执行雹蚂arm-linux-gcc -v
执行方法是:./arm-none-linux-gnueabi-gcc -v
执行后可以得到一长串输出,其中有“gcc version 4.4.1 ”字样,即表示安装成功。
将工具链导出到环境变量
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
在一个终端中执行以上命令后,该终端中就可以直接使用arm-linux-gcc了,但是只要关掉这个终端再另外打开一个立马就不行了。原因是我们本次终端中执行时的 *** 作只是针对本终端,以后再打开的终端并未被执行过这个命令所以没导出。
解决方案是在~/.bashrc中,添加export PATH=/usr/local/arm/arm-2009q3/bin:$PATH 即可。
注意:我们导出这个环境变量是在当前用户,如果你登录时在其他用户下是没用的。
为工具链创建arm-linux-xxx符号链接
ln arm-none-linux-gnueabi-addr2line -s arm-linux-addr2line
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)