引言
- 如今Linux技术算是高级嵌入式开发的标杆了,之前零零散散的学习,总感觉学的不够深入,加上工作的开发任务,目前主要是RTOS。
- 技不压身,还是想继续打磨一下自己的软实力
Linux开发
- 手头有几款Linux开发板,TQ2440、AT91SAM9261、全志A83T、iMX6Q,工作中主要接触过AT91SAM9x35与海思Hi3516的Linux开发,这款【迅为iMX6Q】开发板比较新,上次开箱两年前了,就跳过uboot,后来因为工作中没有Linux与Android,所以一直放在箱子里
- 有时候觉得,干,直接干,会好很多,想太多,自己都会麻木,搞技术,就一句话:【干就完了】。
搜集资料
- 通过之前购买开发板时进的群,找到开发板光盘的网盘地址,由于【百度】网盘手动限速,只好花钱节省下载时间,下载的主要是开发板的硬件、下载与编译工具、镜像文件、开发板手册等,源码,基本就是Android,后面再下载,先研究uboot、Linux,跑个根文件系统
- 之前怎么下载的,印象不够深了,下载部分,还是需要看官方的开发板手册:
iTOP-i.MX6开发板之全能版使用手册_V2.6.pdf
【北京迅为】iTOP-i.MX6开发板使用手册_v1.4.pdf
- 再就是,通过之前【淘宝】的购买记录,查看开发板的内存大小:
1、迅为iMX6Q开发板飞思卡尔linux工业级ARM恩智浦安卓i.MX6DL核心板
2、显示屏:5寸电容屏核心板:四核商业级2G/16G底板类型:基本型
3、迅为开发板专用摄像头模块500万高清自动对焦摄像头模块
- 注意1G与2G的内存,烧错镜像会引起开机异常
下载
- 手头没有TF SD卡,就使用EMMC的方式下载,这部分参考开发板手册
- 准备工作:
- 开发板上有跳线,这里选择USB 下载模式
怪现象
- 下载Android镜像、Linux镜像,过程都挺正常,但是,烧写后,发现开发板没工作一样,串口没有任何的打印信息,即使跳线调到EMMC启动上,依旧不可以。
- 但是在烧写过程中,串口是有打印信息的,所以,怀疑烧写的镜像可能有问题。
搭建开发环境
- 首先搭建uboot的环境,让uboot先跑起来,至少串口有信息出来
- 之前的虚拟机,因为占硬盘太大删掉了,所以这次使用上次买的【阿里云主机】的ubuntu系统开发
- 需要使用开发板推荐的【交叉编译】:arm-2009q3.tar.bz2
解压交叉编译工具链到 /opt目录下
tar -xvjf arm-2009q3.tar.bz2 -C /opt/
设置环境变量:让 arm-none-linux-gnueabi- 系列生效
# vim ~/.bashrc
在 bashrc 文件尾部,增加:
export PATH=$PATH:/opt/arm-2009q3/bin
让环境变量生效
# source ~/.bashrc
- 配置好arm的编译环境:
- 下载NXP的uboot,默认开发板没直接提供uboot、kernel等,给的是android整个源码,当然包含uboot与改过的内核,但是庞大的android,不利于快速的开发与研究
git clone https://source.codeaurora.org/external/imx/uboot-imx
- 分支有新的,也有老的,这里我先切换到老点的分支,毕竟整个开发板,两年前的了
git checkout -b imx_v2009.08_3.0.35_4.1.0 origin/nxp/imx_v2009.08_3.0.35_4.1.0
编译uboot
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
make ARCH=arm mx6q_sabresd_config
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
-
如果出现下面的错误,如开始使用ubuntu 默认的交叉编译器编译失败后,再使用:arm-none-linux-gnueabi-,会报下面的错误,
arm-none-linux-gnueabi-ld: cannot find common/env_embedded.o
-
解决方法:
需要使用:make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean
清理,再重新编译
默认编译的产物不好用
- 烧写后,串口无打印,所以,接下来,需要先把串口调通,再把内存2G的配置好
小结
- 再次开箱,还是遇到了一点点小麻烦,如无法开机(串口无打印),不过这正好激励去认真的研究与解决问题
- 环境搭建与熟悉开发板,占用了较多的时间,但是,为了学习Linux,这都不算什么