01 IMX6ULL裸机开发:初始环境搭建

创建时间:2021/12/21 13:43
更新时间:2022/2/7 0:46
作者:gi51wa2j
标签:100ask_IMX6ULL_v11, bingo, 正文

资料下载:https://download.100ask.org/boards/Nxp/100ask_imx6ull_pro/index.html#id6

一、下载并安装软件

1.1windows软件

软件名

说明

vmware

虚拟机软件,安装时需要用到管理员权限,详细的安装过程见后文

Source insight

阅读、编写源码的工具,即装即用;推荐初学者使用

Visual Studio Code

阅读、编写源码的工具,需要进行很多配置;不推荐初学者使用

MobaXterm

串口工具、远程登录工具

Filezilla

文件传输工具,在Windows和Ubuntu之间传输文件

Notepad++

文本编辑工具,比记事本好用

Hex Editor Neo
一款功能非常强大的二进制、十六进制文件编辑查看工具。可以查看img文件。

1.2常用软件使用目的

VMare:用来创建Ubuntu虚拟机
Filezilla:用来链接PC与ubuntu之间的文件传输
MobaXterm:串口工具,可以直接用来对开发板与Ubuntu进行命令行控制

1.3日常工作流程

Bootloader、Linux内核、APP等等软件,需要在Ubuntu中编译;但是阅读、修改这些源码时,在Windows下会比较方便。

所以,我们需要在Windows、Ubuntu上都存有源码。

① 在Windows上阅读、研究、修改(使用Source insight会很方便),修改后上传到Ubuntu(使用Filezilla)

② 在Ubuntu上编译、制作(使用MobaXterm远程登录Ubuntu会很方便)

③ 把制作好的可执行程序下载到开发板上运行、测试(使用MobaXterm连接开发板的串口)。

在整个开发过程中,我们会用到Windows、Ubuntu、开发板,如下图所示:


二、软件配置

2.1 VMare创建Ubuntu虚拟机

2.1.1 安装VMware

Windows下有很多虚拟机软件,目前市面上流行的有VMware和VirtualBox。VMware分为收费专业版Workstation Pro和非商用免费版Workstation Player,推荐使用Workstation  Player。
首先从VMware官网(www.vmware.com)下载Workstation Player安装包,或者使用我们提供的安装包。
<资料光盘目录>01_Tools (开发工具含ubuntu镜像等)\ 【Windows】VMwareWorkstation安装包中,VMWare安装软件是:VMware-workstation-full-15.1.0-13591040.exe。
安装方法见下图:

VMWare安装完成后,有两个软件,它们都可以使用,建议使用第2个:
① Vmware Workstation Pro:这是收费的,可以试用30天。
② Vmware Workstation 15 Player:这是免费的。
注意:本文所用系统是Windows 10。

2.2.2 使用VMware打开Ubuntu

(1)下载、解压Ubuntu映像文件
解压“网盘配套资料\01_Tools (工具)\100ask-vmware_Ubuntu18.04.7z”,它是Ubuntu映像文件。

注意
① 我们建议初学者不要自己去安装Ubuntu,毕竟可能你连基本Linux命令都还不熟悉。
② 请直接使用我们提供的Ubuntu映像文件,从头安装Ubuntu没有什么技术含量。
③ 100ask-vmware_Ubuntu18.04不支持win7 32位和Windows xp电脑系统,有疑问请联系技术支持。
(2)在BIOS上启动虚拟化(virtualization)
大部分电脑的BIOS已经启动了虚拟化,可以打开设备管理器确认这点,如下图:

如果上图中虚拟化没有显示为“已启动”,需要重启电脑进入BIOS启动虚拟化。各个电脑的BIOS设置界面可能不一样,下面的步骤只是示例。
① 进入BIOS
开机或重启电脑过程中,在自检画面处反复按F2键(注:部分机型使用Fn+F2)进入BIOS Setup设置界面。
② 找到虚拟化菜单
用键盘的右方向键选中 “Configuration”菜单,然后使用下方向键选中“Intel  Virtual Technology”选项并回车,如下图所示:

③ 使能虚拟化
在弹出的菜单中,选择“enable”并回车,如下图所示:
④ 保存
最后按键盘的F10热键(注:部分机型需要配合Fn+F10)调出保存对话框,选择“Yes”保存退出并自动重启电脑,如下图所示:

(3) 使用VMware打开、运行Ubuntu映像文件

① 以管理员身份打开Vmware Workstation 15 player:如下图所示:

② 解压Ubuntu映像文件,然后点击“打开虚拟机”打开前面解压后的ubuntu文件“Ubuntu  18.04_x64.vmx”
如下图所示:

③ 打开并点击“播放虚拟机”启动,如下图所示:

④第一次启动Ubuntu时,选择默认的“我已复制该虚拟机”,启动后输入密码“123456”回车即可登录::

注意:虚拟机默认没有开启小键盘,如果使用小键盘输入,请先开启小键盘。如下图所示:

2.2.3buntu虚拟机的环境配置(安装后操作)

使用下文命令进行一键配置(注意:只有一行)
wget --no-check-certificate -O Configuring_ubuntu.sh https://weidongshan.coding.net/p/DevelopmentEnvConf/d/DevelopmentEnvConf/git/raw/master/Configuring_ubuntu.sh &&  sudo chmod +x Configuring_ubuntu.sh &&  sudo ./Configuring_ubuntu.sh
注意:如果Ubuntu无法上网,请参考前面《网络问题》进行设置。
如果执行该命令出现如下错误:
可以先执行“sudo  apt-get  update”,再重新执行前面的命令。
如果执行该命令出现如下错误:
解决方法:(最简单关机重启)
https://blog.csdn.net/shimadear/article/details/90598646

2.2 开发板、虚拟机、PC三者互通

2.2.1 连接方式

请参考下图所示,连接独家直USB网卡USB端连接至电脑USB接口,另一端网卡接口插入配套的网线,网线另一端接入如下图所示的开发板网卡位置(只能接下图所示网卡)其它网卡网卡直连没法使用所有功能,连接成功后,请打开电脑启用开发板电源,参考下面 系统IP配置章节逐一配置IP地址来实现三者互通。

2.2.2 系统IP配置

(1)windows配置

参考上图连接独家直连 USB网卡至电脑以后,会在设备管理器-->网络适配器下新增一个Realtek USB FE Family Controller 的网络设备(不同的电脑最后的几位字符可能不太一样),确认已经有此设备后可以继续执行下面步骤进行配置IP地址和网段等操作。

确认好 USB直连网卡名称后,参考下图打开控制面板-->网络和共享中心-->更改适配器设置 准备对独家直连 USB网卡进行IP配置。

进入网络适配器页面后,参考下图 鼠标左键点击选中 直连 USB网卡设备,选中设备后鼠标右键,在弹出的选项中点击属性按钮,之后在弹出新的属性对话框内 点击 Internet协议版本4(TCP/IPV4) 继续在新弹出的对话框参考下图图示 选中 使用下面的IP地址 输入 IP地址 192.168.5.10 子网掩码 255.255.255.0 默认网关 192.168.5.1 设置完成后,点击确定,会返回到以太网属性界面,继续点击 确定 表示windows下直连 USB网卡的IP已经配置完成。

(2)常见问题

设备管理器里没有加载出来 Realtek USB FE Family Controller 网络设备
检查vmware是否默认将此设备连接到虚拟机,或提示选择连接到哪里

如果系统没有弹出上图所示窗口,请参考下图所示来查看此 usb网卡设备是否默认已经连接到了ubuntu,如果已连接 请参考下图所示 点击断开与主机的连接。

如果没有出现上述两种情况 但是usb网卡设备 在windows设备管理-->网络适配器内依旧没有新增设备,可能是由于驱动问题,请参考下述步骤检查并安装相应的设备驱动。

检查驱动是否正常安装
由于此usb网卡设备驱动是免驱设备,正常情况系统会自动装载此设备驱动,如没有自动安装驱动,请使用驱动精灵/驱动人生等工具自动安装。

(3) vmware配置

确认windows 直连 USB网卡配置成功后,请参考下图配置vmware 虚拟网络编辑器,参考下图在开始菜单搜索 虚拟网络编辑器 搜索出来后点击Open 打开虚拟网络编辑器 在弹出的 虚拟网络编辑器页面,点击 更改设置 来修改网络配置设置桥接默认连接到 直连  USB网卡。

参考下图所示 点击 桥接模式 在桥接模式下的 已桥接至下拉框 点击 会显示出很多个网卡设备,我们只需要点击选中为 直连 USB网卡名称为Realtek USB FE Family  Controller 的网络设备即可,选中后,点击确定即可完成vmware配置。

(4) ubuntu配置

执行完上述配置直连网卡作为默认的桥接设备后,开打ubuntu虚拟机,在虚拟机关机状态下,点击 编辑虚拟机设置 在弹出的虚拟机设置对话框,点击 网络适配器 设置为如下图所示的桥接默认,设置成功后点击确定,表示已经设置完成,可以 开启虚拟机。

配置网络适配器为桥接模式后,需要进入ubuntu手动设置默认网卡的IP地址为静态IP,参考下图所示,打开 系统 Setting

打开Setting后,在左侧找到 Network 选择栏,点击显示详细内容,之后点击 设置 图标,在弹出的设置界面内,点击 IPV4 切换到 IPV4 设置页面,之后继续点击 Manual 表示自己设置IP地址,在Addresses下的输入框分别填入如下所示的内容,其中 Address写入192.168.5.11 Netmask 写入 255.225.225.0 Gateway 写入 192.168.5.1,填写完成后点击 Apply 应用此设置,之后会弹出一个对话框提示输入 root用户的密码,请参考下图所示。

在弹出的授权请求对话框 里面输入 root用户的密码 (如果未设置root用户密码 请在ubuntu终端下使用 sudo passwd root命令来设置root用户密码),输入密码后点击  Authenticate 授权,到这里就表示IP地址已经设置成功,之后我们可以在ubuntu终端下输入 ifconfig 命令来查看IP地址是否设置正确。

(5)开发板设置IP地址(查看2.5节如何使用Mobaterm串口连接)

每次开机手动设置IP地址
开发板终端下执行 ifconfig eth0 192.168.5.9 即可设置eth0网卡IP地址为192.168.5.9,设置成功后可以使用 ifconfig命令来查看已设置的IP地址,参考如下命令。

设置IP为固定静态IP(开机不变) 设置eth0为静态IP地址, 开发板/etc/network/目录下对interfaces文件进行修改 。
[root@100ask:~]# vi /etc/network/interfaces
修改并为如下内容,执行 :wq 保存并退出,执行/etc/init.d/S40network restart 重启网络服务。
auto lo iface lo inet loopback auto eth0 iface eth0 inet static     address 192.168.5.9     netmask 255.255.255.0     gateway 192.168.5.1

重启后使用ifconfig查看IP地址是否已经自动配置。

2.2.3三者互ping验证

设置完上述IP地址后,知道了 windows ip 192.168.5.10 ubuntu ip 192.168.5.11 开发板ip 192.168.5.9 接下来验证三者是否可以互相网络通信。

(1) windows ping ubuntu

在windows下使用命令提示符,输入 ping 192.168.5.11去 ping ubuntu IP地址,看是否可以接收到数据,同样的 ubuntu下在终端里输入 ping 192.168.5.10 来查看是否有数据返回,正常情况如下图所示,如果你在测试时发现只能单向Ping 通请检查windows防火墙是否全部关闭。

(2)开发板ping windows 和 ubuntu

如下所示在开发板手动设置 ip地址为192.168.5.9 之后使用ping命令来验证是否可以ping通 ubuntu和windows主机,其中ping windows使用ping 192.168.5.10命令 ping  ubuntu使用ping 192.168.5.11命令 看是否有返回值,正确情况如下图所示。

(3)windows 和 ubuntu ping 开发板

如下图所示为windwos和ubuntu去ping 开发板IP,在windows下使用 命令提示符,执行  ping 192.168.5.9 去ping开发板,来确认是否可以和开发板网络通信,在ubuntu使用终端,执行ping 192.168.5.9去ping开发板来确认是否可以和开发板网络通信。

2.2.4 开发板使用nfs挂载ubuntu目录|mobaxterm登陆ubuntu与开发板(ssh)

(1)文件系统内使用nfs挂载ubuntu目录

确认windows ubuntu 开发板三者可以互相ping通以后,ubuntu下已经配置好了nfs目录及环境,可以在开发板上执行以下命令来挂载ubuntu的nfs目录到开发板/mnt目录下,挂载成功后使用df -h命令查看所有挂载。
[root@100ask:~]# mount -t nfs -o nolock,vers=3  192.168.5.11:/home/book/nfs_rootfs /mnt
nfs不懂的话百度,此处照着操作即可

(2)使用mobaxterm ssh登录开发板

确认windows ubuntu 开发板三者可以互相ping通以后,可以使用moabaxteram SSH会话远程登录开发板,操作步骤请参考下图所示。

(3)开发板使用mobaxterm ssh登录ubuntu

确认windows ubuntu 开发板三者可以互相ping通以后,可以使用moabaxteram SSH会话远程登录ubuntu,操作步骤请参考下图所示。

2.2.5 ubuntu虚拟机增加网口可上网

(1) 配置Ubuntu连接网络

在某些情况下 学员可能需要保证ubuntu windows 和开发板之间可以网络通信用来传输文件或者调试,又想让ubuntu可以连接网络进行安装某些在线的软件包,此时我们需要在ubuntu上再新增一个网卡设备并设置为NAT方式用于共享主机Internet网络进行上网。
首先在虚拟机关机状态下,点击 编辑虚拟机设置 在虚拟机设置里新增一个网络适配器。

进入虚拟机设置后,点击 添加--> 网络适配器-->下一步 ,之后再点击完成,即可。

添加完成 网络适配器后,会在虚拟机设置里面 出现一个 网络适配器2设备,之后我们需要设置网络连接方式 为 NAT模式 设置成功后,点击确定即可返回虚拟机启动页面,此时启动虚拟机即可。

启动虚拟机并进入虚拟机后,可以在终端下执行ifconfig命令查看当前网卡信息,会发现多出来一个网卡设备,其中一个是我们之前配置直连网卡桥接所用的网卡,另一个ens38(你的可能不是这个名称)已经自动配置了NAT网段的IP(如没有自动设置NAT网卡IP则在ubuntu终端下执行 sudo dhclient 来自动获取IP),之后我们可以来使用ping 来验证是否可以上网和之前的直连网卡直连是否依旧可用,使用ping qq.com 来验证是否可以连接internet网络,使用ping 192.168.5.10来验证原直连网卡直连是否有效。
(2)常见问题1 虚拟机可以上网但是无法ping通windows和开发板
请在开始菜单 打开 虚拟网络编辑器,参考是否和下图设置一致,由于192.168.2.0/24网段已经被用于直连网卡直连所用,所以NAT模式下不能为 192.168.5.0/24网段。

(3)配置开发板连接网路

我们的开发板一般有两个网口,其中一个被我们用来和直连 usb网卡进行连接作为调试使用,但是另一个网络可以用来进行设置上网,如果需要另一个网口上网,我们可以把网线一段接至开发板 另一端接至可以上网的路由器,之后在开发版文件系统内执行 udhcpc -i  eth1 等待获取IP成功即可
(4)uboot下设置IP挂载NFS网络文件系统启动系统(不用操作,了解即可,前文已经设置好
问: 为什么要在开发板uboot下设置IP挂载NFS网络文件系统启动系统?
答: 在某些场景下,需要多次调试内核,存储驱动或文件系统等某个比较复杂的问题,每次通过手动拷贝重启的方式太过于繁琐缓慢,所以就通过网络方式下载到内存直接运行,文件系统也存在于ubuntu端,可以快速的去调试或定位问题。

在确认windows ubuntu 开发板三者可以互相ping通并配置好 uboot 挂载所需的nfs 根文件系统 TFTP下载所需的内核和设备树后,可以使用如下命令进行下载启动并自动挂载nfs文件系统,其中 /home/book/nfs_rootfs 为ubuntu下开发板所需的文件系统所在目录,100ask_imx6ull-14x14.dtb 为设备树文件,zImage为内核镜像文件。

setenv serverip 192.168.5.11 setenv ipaddr 192.168.5.9 setenv gatewayip 192.168.5.1 tftpboot 0x83000000 100ask_imx6ull-14x14.dtb; tftpboot 0x80800000 zImage; setenv bootargs root=/dev/nfs nfsroot=192.168.5.11:/home/book/nfs_rootfs,vers=3  rw  ip=192.168.5.9:192.168.5.11:192.168.5.1:255.255.255.0:ask:eth0:off:192.168.5.1; bootz 0x80800000 - 0x83000000

执行上述命令后开发板会自动获取内核和设备树文件到开发板内存内,并配置文件系统参数,启动内核并自动挂载NFS文件系统。


如果您在文件系统启动过程中一直卡死在udhcpc获取IP处,请参考下图删除ubuntu nfs  imx6ull根文件系统内 /etc/init.d目录下的 S4开头的文件,(注意是解压到nfs目录的imx6ull根文件系统,不是ubuntu的根文件系统)。


运行内核并挂载nfs文件系统成功后,可以在开发板串口终端下执行 cat /pro/mounts  来查看根目录所在位置。

2.3 FileZilla在Windows和Ubuntu之间传文件

使用MobaXterm及可以ssh登录又可以传输文件,不过Mobaxterm在传输文件时使用效率上没有 FileZilla高,所以我们推荐Windows和Ubuntu互相传输文件用FileZilla。
双击打开FileZilla后,按下图操作:
如下图为示例其中 Ubuntu桥接网卡IP地址是192.168.5.11 用户名book 密码123456 访问端口22 。
在Filezilla中,左边是Windows文件,右边是Ubuntu的文件,如下图:
注意:如果不是使用NAT,则需要输入Ubuntu的IP。

2.4 测试:ubuntu与PC之间的编程与链接

2.4.1用Source Insight编写hello.c

启动Source Insight,点击“File”->“New”,新建文件:
接下来编写代码,保存文件,如下图所示:
hello.c的源码如下:
#include <stdio.h> int main(int argc, char **argv) {     printf("hello, world!\n");     return 0; }

2.4.2使用FileZilla上传源码

如下图操作:

2.4.3使用MobaXterm远程登录Ubuntu

你当然可以直接在Ubuntu桌面启动终端,但是日常工作中使用MobaXterm会更方便。请参考前面《5.3 使用MobaXterm远程登录Ubuntu》。

2.4.4 编译、运行程序

如下图操作,对于gcc命令的用法在后面讲到应用开发基础时再细讲,这里只是体验一下:

2.5 使用Mobaxterm串口连接开发板(此外也可通过ssh连接)

(注意文件烧写的时候使用usb otg接口,即usb串口的上面)
如下图所示将串口线与电脑、板子连接,开发板插上电源。

 其中特别需要注意的几点:

a)板子的启动选择拨到正确的启动方式,保证该启动方式里面有系统可以运行;

b)板子如图所示插上配套的电源到电源接口,电源开关暂时不用打开;

2.5.1 安装驱动cp210x

根据自己电脑的配置前往官网下载cp210驱动

2.5.2 Mobaterm通过串口登陆

(这个软件的清屏快捷键是Ctrl+L)
打开MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示选择端口号(前面设备管理器显示的端口号COM21)、波特率(Speed115200)、流控(Flow Control: none),最后点击“OK”即可。步骤如下图所示。

注意:流控(Flow Control)一定要选择none,否则你将无法在MobaXterm中向串口输入数据。

 

 

随后显示一个黑色的窗口, 此时打开板子的电源开关,将收到板子串口发过来的数据,如下图所示。

在串口看到“imx6ull login:”时,输入“root”并回车即可,如下图所示:


三、编程前的准备工作

    详细的手把手教学视频请看 https://www.bilibili.com/video/BV12A411J7DG 获取源码

万事开头难,能够给开发板上编译的第1个APP、第1个驱动,并运行起来,就算成功搭好环境了。

给PC机编译程序时用的命令是:

gcc  -o  hello  hello.c

给开发板编译程序时用的命令类似下述命令(不同的开发板gcc的前缀可能不同):

arm-linux-gcc  -o  hello  hello.c

所以,在给开发板编译程序之前,需要先获得源码(录制视频过程中编写的APP和驱动程序的源码用git命令下载,内核源码和工具链用repo命令下载),再安装交叉编译工具链,就是arm-linux-gcc这类工具。

 

什么是Git?

Git由Linus Torvalds在2005年创建,用于Linux内核的开发,其他内核开发人员也为它的初始开发做出了贡献。Git是一个免费和开源的 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based) 的版本控制)。

参考引用: https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F

 

我们为什么要用Git来管理源码?

Git的开发流程和代码管理方式适用于国内外各大中小企业,Git也适用于个人发布自己程序源码以及博客网站,同时在文件代码管理上可以很方便的获取同步最新,多人协作开发,以及查看历史提交,集成编译等。

 

什么是repo?

repo是Git之上构建的工具。Repo帮助管理许多Git存储库,将其上载到修订控制系统,并自动执行部分开发工作流程。Repo并不是要取代Git,而只是为了使其更易于使用Git。repo命令是可执行的Python脚本,您可以将其放置在路径中的任何位置。

 

 

 

3.1使用GIT下载教程源码

下载到Windows中,再用FileZilla上传到Ubuntu;也可以在Ubuntu下用GIT直接下载。

在Windows下启动“Git bash”后执行以下命令:

$ git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git

在Ubuntu下打开终端后,可以直接执行如下命令。

book@100ask:~$ git clone https://e.coding.net/weidongshan/01_all_series_quickstart.git

下载成功后,将会得到一个名为“01_all_series_quickstart”的目录,里面含有源码,操作示例如下图所示。

 

3.2使用repo获取内核及工具链等

源码的获取方法有2种:本地拷贝、在线下载。这2种方法请选择1种,不要同时选择2种方法。强烈建议使用在线下载,这种方式得到的源码肯定是最新的。

3.2.1本地拷贝

注意:网盘中的文件不一定是最新的,所以强烈建议使用在线下载源码。

注意:请一定要在Ubuntu下解压100ask_imx6ull-sdk.7z,否则会出现莫名其妙的错误。

 

通过FileZilla工具上传“网盘开发板配套资料“07_Bsp_sdk (BSP包)/100ask_imx6ull-sdk.7z”文件到Ubuntu系统/home/book目录下。

执行 7z  x  100ask_imx6ull-sdk.7z解压缩文件(解压缩时请不要用sudo 命令,否则后面编译会有一系列错误发生)。

book@100ask:~$7z  x  100ask_imx6ull-sdk.7z


注意:如果提示没有7z命令,请先使用命令“sudoapt-get install p7zip”安装(前提是Ubuntu能上网)。

 结束图:

3.2.2 在线下载

100ask_imx6ull开发板的所有代码都是保存在git站点上通过repo命令进行统一管理,可以通过如下命令进行下载或同步。

3.2.3 配置repo

下载repo工具前需要设置git的邮箱和用户名,git邮箱和用户名请根据个人情况进行配置。

book@100ask:~$ git config --global user.email "user@100ask.com" book@100ask:~$ git config --global user.name "100ask"

注意: 请先配置git邮箱和用户名,否则会导致下载失败(如下为参考示例图)。

3.2.4下载源码

通过repo管理多个git仓库中的源码,可以及时更新最新代码,以方便开发者学习使用。

对于不同版本的IMX6ULL开发板,要执行不同的命令下载源码。

 

(1) IMX6ULLPro版

执行以下4条命令,为方便大家复制,第3条是很长的命令,使用了\来换行,需要一并拷贝:

book@100ask:~$ git clone https://e.coding.net/codebug8/repo.git book@100ask:~$ mkdir -p 100ask_imx6ull-sdk && cd 100ask_imx6ull-sdk book@100ask:~/100ask_imx6ull-sdk$ ../repo/repo init -u \  https://gitee.com/weidongshan/manifests.git -b \ linux-sdk -m imx6ull/100ask_imx6ull_linux4.9.88_release.xml  --no-repo-verify book@100ask:~/100ask_imx6ull-sdk$  ../repo/repo sync -j4

(2) IMX6ULL MINI EMMC版

执行以下4条命令,为方便大家复制,第3条是很长的命令,使用了\来换行,需要一并拷贝:

book@100ask:~$  git clone https://e.coding.net/codebug8/repo.git book@100ask:~$ mkdir -p 100ask_imx6ull_mini-sdk && cd 100ask_imx6ull_mini-sdk book@100ask:~/100ask_imx6ull_mini-sdk$  ../repo/repo init \  -u  https://gitee.com/weidongshan/manifests.git -b linux-sdk \  -m imx6ull/100ask_imx6ull_mini_linux4.9.88_release.xml  --no-repo-verify book@100ask:~/100ask_imx6ull_mini-sdk$  ../repo/repo sync -j

 

 

注意下载成功后,可以看到名为Linux-4.9.88的目录,可以在Ubuntu压缩它,再传回Windows。

       在Windows下解压后,用source insight建立工程,这样就可以很方便地阅读源码了。

注意:使用source insight阅读Linux源码的方法,请参考章节《使用Source Insight阅读Linux内核源码》。 

Ubuntu下压缩命令为(最好是下载之后马上压缩,不要编译内核后再压缩,否则文件太大了):

tar  cjf Linux-4.9.88.tar.bz2  Linux-4.9.88

以下截图是下载IMX6ULLPro版源码的过程,mini版的操作与它类似:

 

首次下载如果提示Testing colorized output (for 'repo diff', 'repo status'):  此时输入 y  即可,继续执行../repo/repo sync -j4命令即可开始同步源码(同步代码根据网络情况需要等待数分钟)。

下图为参考示例。

 

 

同步完成后如下图所示

 

注意:repo在线下载的代码和网盘配套资料中的代码是一致的,我们会每隔一段时间更新一次源码包,如使用在线方式获取源码 可以直接在~/100ask_imx6ull-sdk目录下执行../repo/repo sync -c进行同步更新最新代码!

3.3 配置交叉编译工具链

注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效)。

3.3.1 设置交叉编译工具链

交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其他平台上运行。

设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量,下面介绍具体设置方法。

在本文档中,源码、交叉编译工具链都是存放于/home/book目录下;如果你的目录不一样,请自行修改本节所讲述的命令。

设置这3个环境变量有多种方法,任意选择其中一种方法即可,建议使用“永久生效”的方法。录制视频时我会使用多种开发板,所以在视频里我总是使用“临时生效”的方法。

(1)永久生效

如需永久修改,请修改用户配置文件。

注意:如果不会使用vim命令,可以使用图形化的编辑工具,执行:gedit  ~/.bashrc

vim  ~/.bashrc

(1) IMX6ULL Pro版

在行尾添加或修改,加上下面几行(第3行第4行为一行命令):

export ARCH=arm export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

设置完毕后,要执行 source  ~/.bashrc命令使其生效,这条命令是加载这些设置的环境变量。

(2) IMX6ULL MINI EMMC版

在行尾添加或修改,加上下面几行(第3行第4行为一行命令):

export ARCH=arm export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- export PATH=$PATH:/home/book/100ask_imx6ull_mini-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

设置完毕后,要执行 source  ~/.bashrc命令使其生效,并通过arm-buildroot-linux-gnueabihf-gcc -v命令来验证是否配置成功。

book@100ask:~$ source  ~/.bashrc book@100ask:~$ arm-buildroot-linux-gnueabihf-gcc -v

以上操作是设置IMX6ULLPro版工具链的过程,mini的操作与它类似。

(2)临时生效

也可以手工执行“export”命令设置环境变量,该设置只对当前终端有效(另开一个终端需要再次设置)。

(1) IMX6ULL Pro版

执行以下3个命令,第3个命令很长,需要包含第四行全部复制:

book@100ask:~$ export ARCH=arm book@100ask:~$ export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

 

(2) IMX6ULLMINI EMMC版

执行以下3个命令,第3个命令很长,需要包含第四行全部复制:

book@100ask:~$ export ARCH=arm book@100ask:~$ export CROSS_COMPILE=arm-buildroot-linux-gnueabihf- book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull_mini-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

(3)手动指定

先设置PATH环境变量,然后在make编译时指定ARCH架构CROSS_COMPILE交叉编译工具链(执行make命令时指定的参数,只对当前命令有效;下次执行make时仍需要再次指定那些参数)。

(1) IMX6ULL Pro版

示例如下,第1条命令很长,这里使用小字体方便大家复制:

book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin book@100ask:~$ make  ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabihf-

 

book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin book@100ask:~$make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

 

(1) IMX6ULLMINI  EMMC版

示例如下,第1条命令很长,这里使用小字体方便大家复制:

book@100ask:~$ export PATH=$PATH:/home/book/100ask_imx6ull_mini-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin book@100ask:~$ make  ARCH=arm CROSS_COMPILE=arm-buildroot-linux-gnueabihf-


3.3.2测试交叉编译工具链

(1)测试环境变量:
book@100ask:~$ echo $ARCH arm book@100ask:~$ echo $CROSS_COMPILE arm-buildroot-linux-gnueabihf-
(2)测试交叉编译器:

执行以下命令,结果见后图:

book@100ask:~$ arm-buildroot-linux-gnueabihf-gcc -v

3.4 使用Source Insight阅读Linux内核源码

注意:sourcesight4.084版本不支持中文路径
在后面开发驱动程序时,驱动程序中用到的函数都是来自内核,所以可以先在Windows下创建内核的Source Insight工程。
如果你不想学习驱动开发,那么可以不创建内核的工程。但是以后学习大型APP时,也可以使用Source Insight来阅读、编写代码,可以借鉴本节讲解的Source Insight用法。

3.4.1 Source Insight简介

Source Insight是Source Dynamics 公司出品的源代码编辑器。Source Insight提供语法突出显示,代码导航和可自定义的键盘快捷键。它不仅仅是一个编辑器,而是一个理解大型源代码库的工具,因此被称为“程序编辑器和分析器”。它灵活轻便,提供有用的功能,如关系,上下文和符号窗口。它在建源码工程时,构建了符号信息的内部数据库,所以还可以显示引用树,类继承图和调用树。它的最大好处是加快了对不熟悉项目的代码理解。
参考网址
l 官网主页 https://www.sourceinsight.com/
l 软件下载页面 https://www.sourceinsight.com/trial/
l 用户使用教程  https://www.sourceinsight.com/doc/v4/userguide/index.html

3.4.2 在Windows上解压内核源码

前面章节《使用repo下载内核及工具链等》里下载到内核后,在Ubuntu下压缩了内核,把压缩文件通过FileZilla传回Windows,并解压。
在Windows解压内核时会提示一些错误,会提示是否覆盖文件,选择“覆盖”即可。这是因为Linux下的文件区分大小写,a.c和A.c以不同的文件,但是Windows下不区分大小写,这2个文件是同一个。这些错误不会影响我们阅读源码。

3.4.3 建立工程示例

本节新建一个linux kernel的source Insight工程,你也可以为其他APP建立工程,方法是一样的。
1. 新建工程
运行source Insight,点击菜单“Project->New Project”,如下图所示:
2. 设置工程名及工程数据目录
在弹出的New Project对话框中设置“New project name”(项目的名称),然后设置Where do you want to store the project data file? (项目文件保存位置),前往源码目录新建一个SI文件夹,把sourceinsight的项目文件保存在这里。
3. 指定源码目录
设置“Project Source Directory – the main location of your  source files”(源码目录),
点击红框左边“…”选择源码目录,点击OK,如下图:

4. 添加源码
在新弹出的对话框中,点击“Add”或“Add All”。“Add”是手动选择需要添加的文件,而“Add All”是添加所有文件。我们使用“Add All”,在弹出的提示框中选中“Recursively add lower sub-directories”(递归添加下级的子目录)并点击OK。同样的Remove File,Remove All是移除单个文件或者移除所有文件,如下图:
添加文件完成后点击Close,此时界面会返回到主界面,如下图,点击“Close”:


5. 同步文件
同步文件的意思是让Source Insight去解析源码,生成数据库,这样有助于以后阅读源码。比如点击某个函数时就可以飞快地跳到它定义的地方。
先点击菜单“Project->Synchronize Files”,如下图所示:

在弹出的对话框中 选中“Force all files to be re-parsed”(强制解析所有文件),并点击“Start”按钮开始同步,如下图所示:

四、日常学习(后续练习)

在后文中,我们常常编写裸机程序,但是却需要在linux虚拟机上面运行
很是麻烦,所以通常在windows上配置交叉编译工具方便编译程序
下载安装Git并在Git上面配置Make和可以编译ARM程序的GCC
具体流程查看该文章使用GCC+Make在Windows下搭建ARM裸机开发环境