对于初学者,只需要一台安装有linux操作系统(比如Ubuntu)的PC即可,或者在windows下安装一个虚拟机软件(Vmware),虚拟一个Linux系统的主机,但是我建议还是安装真机,这样会迫使你必须在Linux环境下做任何事情,能让你更快的熟悉Linux操作系统。
那么当我们进入进阶阶段的学习时,需要在硬件设备上跑程序的时候,那我们就需要继续搭建交叉开发环境了。交叉开发模式即编译和运行不在同一台主机上,在PC机上编辑、编译,在目标机(开发板或者产品)上运行程序。
在主机上开发完程序,通常使用nfs网络挂载或者tftp将目标代码通过网线下载到目标板进行验证,但是,像我们当前项目的驱动开发,驱动都是集成在内核中的,所以每次都是在Ubuntu上将整个内核代码进行编译,然后通过usb将整个内核镜像产物进行烧写。
gcc一般Linux系统自带,不用自己安装,下面简单说下gcc编译的过程,GCC的编译流程分为四个步骤:
链接时有时候会加如下参数:
当我们初学的时候仅仅在Linux主机下编译运行我们的程序,gcc就够了,但是如果交叉运行时,就必须安装交叉编译工具链,交叉编译工具链可以自己制作,但是我还是建议大家通过以下方式安装:
修改配置文件/etc/bash.bashrc,在最后一行添加:
export PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin/
source /etc/bash.bashrc
arm-none-linux-gnueabi-gcc -v、
如果可以看到版本号,说明安装配置成功。
tftp是用来下载远程文件的最简单网络协议,基于UDP来实现的,嵌入式linux的tftp开发环境包括两个方面:
一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot(bootloader的一种)本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。
sudo vi /etc/default/tftpd-hpa
改为:
-l:以standalone/listen 模式启动TFTP服务,而不是从inetd启动 ,standalone/listen模式是一次启动,运行期间一直驻留在内存中,优点是反应快,缺点是损耗了一定的系统资源,通常用于对实时性要求较高的地方,inetd启动方式相反,只在外部发出连接请求时才调用tftp进程,不占用系统资源。
-c:可创建新文件,默认情况下,TFTP只允许覆盖原有文件,不能创建新文件。
-s:改变TFTP启动的根目录,加了-s之后,客户端端在使用TFTP时,不再需要输入指定的目录。
sudo service tftpd-hpa restart
sudo mkdir tftpbootsudo chmod 777 tftpboot
tftp localhost //登录tftp > get xxx //xxx为你想要从服务器(/tftpboot目录)下载的文件tftp > put xxx //xxx为你想要往服务器(/tftpboot目录)发送的文件tftp > q //q表示退出
如果采用烧写整个Linux kernel镜像的方法,通常使用usb将主机和目标板连接,然后根据不同的芯片厂商提供的烧写工具进行烧写,比如高通芯片使用Qfile工具进行烧写。