交叉开发

交叉开发
开发软件
编辑代码(写代码)–>编译代码—>运行代码
开发环境(编辑环境):就是你写代码,编译代码得机器的环境
运行环境:运行你编译后的二进制的环境

很多嵌入式产品,不适合编写代码,也没有开发工具,只能在自己的pc上面写代码,并且编译代码,
在把编译好的可执行文件下载到目标产品上面
如:
单片机开发
开发环境:windows(keil) + x86
===》.hex
运行环境:stc89c52/51 …

交叉开发:编译代码的环境和你运行的代码的环境不一样
在一种环境下面去编译另外一种环境运行程序

交叉编译如何进行?
编译的四个步骤:
预处理:处理以#开头的行 gcc -E test.c -o test.i
头文件
宏定义
条件编译
编译:把程序代码编译成对应平台的汇报代码 gcc -S test.i -o test.s
x86: pc
复杂指令集(CISC)
ARM:
精简指令集(RISC)
汇编:
把汇编代码编译成一个目标文件(机器指令文件) gcc -c test.s -o test.o
ELF文件"分段"
各种对象放到不同的“段”中


.data
.rodata
.bss
.txt
链接: gcc test.o -o test
把各个目标文件(.o)链接成一个可执行文件,把各个目标文件(.o)的.txt
.data …合到一起的时候,解决地址中的冲突问题

在一种环境下面去生成另外一种环境可以运行的可执行文件
如:  
	在x86环境(linux/ubuntu)生成开发板(ARM)可以运行的程序 
	
	gcc:生成在x86上运行的可执行程序
		sudo apt-get install gcc 
	arm-linux-gcc:生成在ARM上面运行的可执行程序	
	(交叉编译器)
	交叉编译环境一般使用linux系统
	
	交叉编译器的安装:
		一般来说,交叉编译器是厂商直接做好的,编译好的,你直接使用就可以了。
		编译器版本和编译内核的编译器版本一致
		
	1.把交叉编译工具的压缩包,放到自己的linux系统下
	不要放到共享文件夹(共享文件夹是windows的文件夹)
	cp /mnt/hgfs/share/第一阶段/交叉开发/day_01/data/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi..xz /home/china/gh
	2.解压到一个合适的目录
	sudo mkdir /usr/local/arm  
	sudo tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi..xz -C /usr/local/arm
	3.在解压后的目录中 
		/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin 
	就有你需要的交叉编译器
		arm-linux-gnueabi-gcc 
		...
	就是你的交叉编译器 
	如果使用这个交叉编译器:
	/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc test.c -o test 
	指定编译器的路径,不然shell不知道你的命令在哪里。
	为什么我们敲ls,gcc不需要指定路径? 
	这些命令在我们系统的默认路径下面。
		a.你可以把你的命令放到默认路径下面去
		b.你可以使你的编译器的目录变成默认路径的一部分
			把我们这个目录加入到一个名字叫做PATH的环境变量
		PATH:这个环境变量保留了系统默认的可执行文件的目录列表	
		PATH = dir1:dir2:dir3....
			a.临时性的改变PATH(只对次终端有效)	
			export 导出环境变量
			export PATH=/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin:$PATH
				仅仅对导出环境变量的那个终端有效
			b.写入配置文件,对当前用户有效
			把上面的语句写/入当前用户的配置文件 
			家目录下面 .bashrc
			vim ~/.bashrc
			export PATH=/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin:$PATH
			
			c.写入配置文件,对所有用户有效
			把上面的语句写入系统的配置
			/etc/profile 
			sudo vim /etc/profile
		
	4.觉得编译器的命令太长了,给arm-linux-gnueabi-gcc 创建一个软链接
		arm-linux-gnueabi-gcc 
		---> 
		arm-linux-gcc 
		ln -s arm-linux-gnueabi-gcc arm-linux-gcc
练习:
	1.理解交叉编译器配置的所有的步骤,练习一遍 
	2.学过了shell
		写一个shell脚本,把/usr/local/arm/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabi/bin
		所有的工具都建立一个对应的软链接
		
		sudo vim xx.sh 
		./xx.sh 就会为所有的工具都建立一个对应的软链接
		arm-linux-gnueabi-g++ 
		---》 
		arm-linux-g++
		提示:shell中 ${}, ##和%%的用法
		假如我有一个变量: 
			file =xxx/dir2/dir2/dir3/dir4/my.file.txt 
		可以使用${}获取字符串中不同的内容:
			${file#*/} :删除第一个/以及左边的字符串 
			 ---》 
			 dir2/dir2/dir3/dir4/my.file.txt 
			
			${file##*/} :删除最后一个/以及左边的字符串 
			 --》
			 my.file.txt 
			${file##*.} :删除最后一个.以及左边的字符串 
			 --》 
			 txt 
			${file#*.}:删除第一个.以及左边的字符串 
			--》 
			file.txt 
			${file%/*}:删除从右边数第一个/以及右边的字符串 
			--》 
			xxx/dir2/dir2/dir3/dir4
			${file%%/*}:删除从右边数最后一个/以及右边的字符串 
			--》
			xxx	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值