搭建驱动开发的环境,便于调试。文章记录了本人的项目实践和朱有鹏老师的课程知识汇总。
(1)在线安装。譬如ubuntu中使用apt-get install vim来安装vim软件。
(2)自己下载安装包来安装。缺陷: 不知道下载的安装包和系统是否匹配。
(3)源代码安装。
总结:安装交叉编译工具链(arm-linux-gcc)实际采用第二种安装方式。
打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹
先将安装包从Windows中弄到linux中去。可以用共享文件夹,也可以用Samba,也可以用cuteftp。
解压: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”**字样,即表示安装成功。
arm-none-linux-gnueabi-gcc No such file or directory这个错误的分析思路:正常来说只有某个被编译的文件不存在才会报这个错误,但如果确少某个必要的包,也会出现这个问题,而且根本不知道从哪里查问题。
真正原因: 这个gcc可执行文件是32位的版本,而在64位系统上需要安装32位兼容包才可以运行正常。
解决办法:
安装ia32-libs (sudo apt-get install lib32z1
)
但是此时只能在应用程序目录下执行应用程序或者在别处执行时需要写入完整的应用程序路径/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc-v比较繁琐,所以下面引入环境变量。
环境变量就是操作系统的全局变量。每一个环境变量对操作系统来说都是唯一的,名字和所代表的意义都是唯一的。linux系统可以有很多个环境变量。其中有一部分是linux系统自带的,还有一些是我们自己来扩充的。我们这里涉及到的一个环境变量是PATH。PATH这个环境变量是系统自带的,它的含义就是系统在查找可执行程序时会搜索的路径范围。(此时在任意路径直接执行arm-none-linux-gnueabi-gcc -v都可以了)
输出linux系统环境变量: echo $PATH
在终端中输入
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
但是此时只要关掉这个终端再另外打开一个立马就不行了。原因是我们本次终端中执行时的操作只是针对本终端,以后再打开的终端并未被执行过这个命令所以没导出。
解决方案:
在~/.bashrc中,在最下面添加环境变量
export PATH=/usr/local/arm/arm-2009q3/bin:$PATH
更新~/.bashrc文件, source ~/.bashrc
终端中输入: ln arm-none-linux-gnueabi-addr2line -s arm-linux-addr2line,即可通过arm-linux-addr2line访问ln arm-none-linux-gnueabi-addr2line
set ipaddr 192.168.1.10
set serverip 192.168.1.141
set bootcmd tftp 0x41000000 uImage \; tftp 0x42000000 exynos4412-fs4412.dtb \; bootm 0x41000000 - 0x42000000
save或saveenv
sudo tar -zxvf rootfs.tar.xz -C /x210_porting/rootfs
sudo vim /etc/exports
/x210_porting/rootfs *(subtree_check,rw,no_root_squash,async)
sudo service nfs-kernel-server restart //重启nfs服务器,或sudo /etc/init.d/nfs-kernel-server restart
测试是否挂载成功
sudo mount -t nfs localhost:/x210_porting/rootfs /mnt
setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/x210_porting/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
save
reset //重启开发板
解释:
bootargs 是uboot传递给内核到启动参数,是一个字符串
console=xxx: 告诉内核启动时候到调试信息是从哪个设备输出
init=xxx: 告诉内核linux到第一个用户进程是什么
root=xxx : 告诉内核根文件系统在哪里
root=/dev/nfs 表示根文件系统在网路远端
nfsroot=ip:path
ip=xxx :告诉内核开机的时候内核的ip地址是多少(静态分配ip)
HQ驱动开发环境搭建-上
驱动开发环境搭建-下
华为云