Linux学习 韦东山IMX6ULL(一)搭建环境并编译程序
一、记录目的
工作了也有一定的时间了,但在嵌入式这个行业,还没有接触过linux,以前大学学的都忘了。所以买了一块韦东山的imx6ull-pro开发板来学习一下。因为是碎片学习,有时候加班也不能保证每天都能看,所以很多时候需要比较长的时间去回想上一次到哪一步,就记录一些步骤。
二、搭建环境
1、资料下载
git拉取01,网盘下载02,文档都有操作说明。
2、软件安装
①、VMware、git、串口驱动
我本来就有,不用安装
文档的开发工具也提供了
②、MobaXterm串口工具、FileZilla,source insight
一个是串口工具,一个是用作ftp传输文件,一个查看、编辑代码的工具。解压后直接安装即可。
串口工具安装完板子上电,接上线,能按文档那样正常输入指令就好。
filezilla按视频完成了一遍从虚拟机拉取文件和从主机推送文件到虚拟机的操作。
source insight我很少用,都是用vscode,在公司前辈都是用的这个工具,都说很好用,正好学一下用法。
3、运行Ubuntu
解压
按文档打开虚拟机
按文档检查网络适配器没问题
按视频所说的直接用现成的,主打听劝
4、烧录支持adb的系统
按视频ls查询,发现没有adb,拨码切换到usb启动
解压,点烧写整个系统
这里注意要么别打开虚拟机,要么就在虚拟机设置连接主机并记住选择。不然会烧录失败
三、第一个app程序
按文档,编译了hello.c文件,这个就按着操作没发生什么问题,没截图了。
四、第一个驱动程序
1、配置编译
①、内核、设备树、其他驱动程序
手册第三篇第五章
用mobaxterm 连接虚拟机,依次执行指令,分别是删除编译文件、配置、编译内核、编译设备树、拷贝内核文件到NFS目录
还有视频中一个拷贝设备树文件,但是我这个手册没有:
cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs
模块驱动程序编译:
安装目录:
完成上述之后ls了一下nfs。可以看到刚才加的都在,而且可能因为我用的是安装好的环境,所以我的文件会比视频中多几个
②、将上述编译后放到开发板上
然后照视频 adb登录 然后同步、重启
再adb登录 查看内核时间 证明内核已更新
③、编译测试驱动程序
按视频用filezilla 上传文件到nfs目录,发现我这个本来已经有了,我把原来的删除了,重新上传。
上边的shell输入exit退出,
然后进入上边的这个目录,vi Makefile
指定内核
:wq
然后make,生成.ko文件后
用adb将文件push到开发板上:
这里发生了一个问题,就是我是分开2天搞的,所以开发板我是断过电再重新上电的,然后我push的时候一直报开发板没连上,我在虚拟机先断开开发板连接再连,才push成功
↑这里后来运行程序的时候,我发现我push错了,应该是push hello_drv_test这个文件,而不是.c文件,后边把文件push到开发板了
④、测试验证
用串口操作了这个hello函数,敲字符串内容的时候视频是直接输入他的网址,我是随便敲一个,顺手打了个空格。结果没输出成功。
后来我看了一下这个hello_drv_test.c,他是用argc这个命令行参数的总个数来判断的(argc==3即程序名+ -w+string),我没有加双引号的话,加了空格就多出来了一个参数
五、交叉编译hello程序
用fileZilla上传hello.c(本来有了我直接覆盖的)
编译 然后执行
gcc 为编译器 -o 为output 即输出名为hello的程序 源文件为hello.c
./ 代表为当前目录下 然后hello为文件
也可以输入第二个参数 则会将hello替代 跟上边的hello驱动程序一样
这里gcc是为主机编译的,给arm开发板的文件需要用另外的编译器
手册搜索配置交叉编译工具链
将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直接复制回车
然后编译,复制到nfs_rootfs目录里
然后将开发板挂在在虚拟机的mnt目录上
这里插一下开发板ping通虚拟机的。现在我直接将开发板的网口接到路由器,然后我的主机网口也接的路由器。
我看手册上要设置静态ip,然后又要转换头什么的,我没有按手册上的操作。
点开网络设置,ens36就是手册上说的桥接网卡,点一下设置,看到这里的静态ip
然后用串口,直接ping这个ip,是可以ping通的,同时可以挂在虚拟机中的nfs_rootfs这个文件夹
但是这里hello并没有输出想象中的内容,我后来发现我虚拟机的文件,会丢失回原来的文件,后来重新改了hello.c编译后再复制到nfs目录下就可以了。原因还没查到,百度了一下说虚拟机非正常关机就会这样,但我记得我都是点了虚拟机休眠,后边先试试到底是什么原因再开始下一步。
至此adb和挂载nfs两种方法都成功了。
六、总结
整个过程vim和shell都不怎么会用,一直像个老年人一样一点一点敲,敲一下又百度一下用哪个指令。多敲然后熟能生巧吧。然后实际上整个过程我都没有去过多理解内核上的东西,就是纯跟着视频做,熟悉整个流程。
对于我个人来说,比较认同韦东山老师提出的这个学习路线,入门先快速上手,毕竟我现在不是在学校,工作之余的碎片时间学,本来就需要时间拼接起上一次学完的内容,所以先简单上手比较适合我。继续加油~