没错,这篇确实值得一看!可能是由于我稍微会一点点哈,就有好多小伙伴就找我帮他们搭建环境,但Linux中的以及开发版连接,与烧写程序中的整个环境搭建会有很多不确定的问题,确实让人头疼。所以可爱滴你们哈,使用的系统和环境以及串口连接,不是我亲手所搞,一但出现问题所以我这边是很难在较短的时间内解决的。这就导致了一个花费很长的时间,且不一定能解决问题的问题,更要命的是远程连接。。。控制,这个 ,啊~~~确实要命,,,
所以赖,我就重新使用老师的那套系统,又重新搭建了一遍环境并做一个完整流程的笔记以供大家参考。
好了,一个人的闲扯结束,正片开始。以下内容本人以及大口测试过了,请放心食用。
同样滴,所用到的软件请自行更具自己爱好下载咯,为了方便我以及将梁老师云盘中所用到的资料,偷偷搬到了我云盘目录下,直接下载即可。(至于百度网盘限速的问题,大家可以百度 软件小妹使用浏览器插件即可加速下载,或者。。。。vip。。。。)
Linux系统:梁老师云盘Cetos_32.ova
虚拟机:Vmware16pro
终端登录软件:Tabby
文件传输软件:Xftp
这些软具体我会在云盘中标注直接选用下载即可
链接:https://pan.baidu.com/s/1gp2MkpKK0XShxCnQdW-eUA?pwd=1111 提取码:1111
关于什么是内核,为什么要编译内核,编译内核有什么用,额。。。既然有人问赖,那我这里就 弱弱的说说咯,只是个人的理解。可能这里一部分有点啰嗦,大家也可以直接跳过我胡扯的这一部分。
我们做的这所以的一切其实很简单,我们都知道,一个什么系统都没有安装的电脑只是一个躯壳,它木的灵魂,不可开机,不可愉快的占领高地赢得胜利,也不能大吉大利,今晚吃鸡。但是如果我们在自己的电脑中安装一个系统比如,微软的Windows10,这个时候,我就可以在这个电脑中安装PUBG、安装LOL,甚至是下载学习资料同时与多个女孩子在同一个窗口下聊天,当然你首先必须保证你的电脑有一个系统,其次系统中有以供以上活动内容的软件,才行。
其实我们的开发版也就是一个电脑,一个迷你微机,那么我们目前在做的作业与一个比较low,且不太专业的词汇解释的话,就是所谓的装系统,对的没错就是在装系统,不是吧,只是在装系统???没有别的,,,额,这个当然是有的了,我们还得装软件。。
路人甲:嗨~~~你这不是和没说一样吗?装系统不就是为了装软件吗,这个还用你说,有手就会的好吗?
不不不,其实这里的装系统与软件,绝非是像在自己的电脑中安装那么简单的。由于我们普通使用的电脑CPU(X86)与开发板中的CPU(4412芯片 ARM)其架构在底层是不同的,那么其安装方式也是有着很大的差别,如果安装过Linux系统的小伙伴可能会深有体会。
路人甲:既然安装Linux这么的麻烦,那我们为什么不直接在开发版上安装Windows呢?
哈哈,糊涂啊!你,你是不是Windows正宗的盗版系统用习惯了,都忘记了自己使用是破解的盗版系统了?
由于,Windows系统是收费的,既然是收费这就导致了,系统的源码,也就是系统的五脏六腑(源码)是不可以更换自定义DIY(个性化定制)的。这样就有一个很严重的问题出现,Winwds系统源码不公开,无法对系统进行裁剪,系统本身的体积就变得非常庞大(至少4G)。不能将系统轻量化,对于这样程度的庞大系统,我们的板子看了后直摇头,直呼,臣妾做不到。。。其实这也难为我们板子,毕竟,比较开发板的芯片可没有电脑中的cpu强劲,也没有我们电脑中的8G或16G甚至32G的内存条那样豪横。。
但Linux却不一样,对Linux可以理直气壮的给Windws说,我们不一样。
Linux首先我们这辈子肯定是没有机会使用盗版的咯,因为哈。Linux就没有正版,又从哪里来的盗版呢?
路人甲:停停停,,你说没有正版,什么意思???这是什么意思??我当时可是特意花费了,一顿两个牛肉包的早餐,你感想吗?两个牛肉包哦,专门请隔壁的老王,让他在Cetos官网,在Ubuntu官网上下载的正版呀。老王还给我说这玩意,绝对正品。而且我用着觉得很流程呀?
呃呃呃。。。我只能说天下的隔壁老王都不可靠。你还记得我们的Linux的精神是什么吗?对的没错,就是让人热血沸腾的开源分享精神,秉着Linux的开源精神,Linux源码就衍生出了许多的后代如同我们熟悉的Cetos,Ubuntu,readhead,kali等,既然是开源精神,那么这些系统就是完全免费,不向广大的可爱群众收取任何费用,这里的费用是值不收取系统的使用费用,但系统的维护费用还是该要还得要得嘛,不然向我们这群常常白嫖习惯得小可爱,那可不得让人家Cetos,Ubuntu官方倾家荡产哈。
路人甲:哦哦,了解懂了懂了。也就是说,Cetos,Ubuntu官方也就是使用原生得Linux内核将其进行衍生定制DIY出了属于自己旗下得有特色的Linux咯
对的没错,就是这样。所以Linux的源码才是一栋高楼的基础,只有了Linux原汁原味的内核源码,才能衍生出其他的DIY定制Linux滴
路人甲:那还等什么,我们就开始定制自己的Linux咯,这样我就可以将自己qt软件安装,到自己定制的轻量级Linux中,以后编写好的qt程序,直接就可以在自己定制的开发版中使用咯。
对的没错,就是这样,既然你大致了解了我们整体的流程,那我们就开始装系统吧?怎么装?那当然是先编译内核源码的咯。。。
路人甲:哎哎哎!!!听一下,你说点人话行不行?为什么叫做编译内核而不是安装内核呢?
额。。。额。。。你糊涂呀,你。。小可爱。你用记事本写的HelloWorld.c 直接双击会出现什么惊喜?
路人甲: 额。。我想想哈,,会出现一个黑窗口 并弹出一句向世界问好的 HelloWorld 哈哈没错就是这样,我写HelloWrold的高手
我。。。。我。。真的是。你还是把HelloWorld.c 熟练的用鼠标打开关闭20遍吧。你的打开的是HelloWorld.c 源码哎,我的路人甲呀,既然是源码,你看到的就是只有C语言编写的程序,又怎么可能会出现一个黑色的运行窗口呢?**
路人甲:哦哦哦,,对对对呀,我疏忽了,大意了呀。我刚才听错了,我以为是你让我点击,我华丽的VC++上面的绿色三角图标呢?
其实呀,你点击的过程也就是编译的过程,也就是将HelloWorld.c源码编译成了HeoolWorld,exe的Winwds可执行文件。所以赖,我们所谓的Linux内核编译,其实就是Linux内核的源码编译,再人话点的说就是,Linux内核源码C语言文件程序编译。怎么不行?那你看看LInux源码下都是什么赖
路人甲:哦哦哦,明白了。源码了Linux源码是一个庞大的HelloWorld工程呀,懂咯,懂了,只要我们把,这个庞大的HelloWorld工程编译成一个可执行的HelloWorld.exe的应用就行了呀,这简单哈,我就用gcc编译工具直接编译就行咯。
额,,呀,你这稀奇古怪的想法,真滴是,,,对的,你说的没错,我们需要的就是,将这个庞大的Linux内核源码文件进行编译,最终生成我们的可执行文件。但是哈,值得注意的一点是,由于之前说过,我们的普通电脑(x86)与开发板(arm)中的cpu架构是不一样的,所以当然咯,可执行程序的架构也必定也是不一样的?这就解释了为什么,苹果ios系统的应用程序,再我的安卓机上无法使用赖,或者windows应程序在Linxu中也无法使用咯。这个时候我们的交叉编译工具就得登场了,注意区别linux中得gcc与arm-linux-gcc的区别,这是两个不同的编译工具。相当于两个不同的交通工具,比如汽车与飞机,最终可能到达的目的地一样,但是所走的路完全不同,不然就是很严重的事故。
不信你看嘛,我用两个不同编译器编译同一个HelloWrold.c文件
这里可以看到通过使用arm-linux-gcc 与gcc 编译生成的两个可执行文件Hello_arm 与 Hello_x86 的文件属性是不同的一个是arm架构一个是x86架构,当然咯,我们4412开发板中可以执行的文件当然是用arm-linux-gcc编译生成的Hello_arm文件咯,而我们的虚拟机中的linux可执行文件就是gcc编译生成的Hello_x86文件咯。
什么?你不相信。。。。那你看我在虚拟机中分别执行这两个文件会出现什么效果赖。。
没错——可爱路人甲哈,和你猜到的结果一样哈,果然gcc 编译生成的x86架构的可执行文件,在虚拟机中的Linxu中成功向这个世界发出了一句友好的HelloWorld问候。
路人甲:不愧是我,那么也就是说 arm-linux-gcc 编译生成的arm架构可执行文件,就只能在我们的开发板中向这个世界问好咯?
对的没错,就是这样,既然 要让arm架构的HelloWrold在开发板中,向世界问好,那么我们就得给它一个可以打招呼的平台咯,那这个平台就是我们的自定义的arm架构的linux咯。
路人甲:既然如此,那就开始我们的系统DIY咯。。。
其实扯了这么多,大家应该明白了我们在干一件什么事咯。。。。
好了言归正传,继续回到内核编译
我这里使用的 Tabby 这款终端软件,由于该软件是在Github上源码开源的所以可以免费使用,软件在我上传的云盘自行下载即可咯
共享文件夹
由于这是一个新的Linux,我又比较懒,共享文件夹挂载与搭建起来比较麻烦,所以我在整个过程中未使用共享文件夹。关于共享文件的挂载,你们赖可以参考之前我这篇博客过程
ftp文件传输
这里我使用了一款正宗的破解软件Xftp,使用该软件直接ssh登录即可实现文件的传输。
解压源码
cp tiny4412_linux_defconfig .config
//复制修改tiny4412_linux_defconfig 文件为 .config
//指定编译的配置文件芯片为4412
定制Linux剪裁定制内核
make menuconfig
//进入配置定制的图形化菜单
make -j 4
-j 指定编译调用的cpu线程
*需要注意的一点就是这个与自己的主机配置以及虚拟机所分配的硬件配置有关
*具体的参数详情以及参数指定可自行百度了解
这里可以看到的一点是 调用了arm-linux-gcc 编译器正在将原来的 xxx.c文件正在编译为xxx.o的文件
这些就交给我们的编译脚本MakeFile文件去在执行咯
这里可以看到以及编译完成咯
解压Uboot源码
unzip uboot_tiny4412_new.zip
这里需要注意的一点就是 unzip这个工具需要自己安装,如果使用的是老师提供的系统,该系统中以及安装好了该工具
安装命令
#Cetos 系统
yum install unzip
#Ubuntu 系统
apt-get install unzip
编译Uboot引导
unzip uboot_tiny4412_new.zip
#解压Uboot源码文件
cd uboot_tiny4412
#进入源码文件根目录
make tiny4412_config
#加载 编译配置文件
make
#uboot源码编译
在Linux下检查是否正常接入
ls /dev/sd*
烧写Uboot到SD卡
./fast_fuse.sh /dev/sdb1
# ./fast_fuse.sh 这是我们之前编译好的可执行文件
#/dev/sdb1 所烧写到的目录
将读卡器直接拔出
注意检查自己的串口是否与笔记本正常连接
通过SD卡启动,连接串口到终端
终端连接
可以看到已经通过SD已经正常启动
6、格式化eMMC
fdisk -c 1 320 2057 520
fatformat mmc 1:1
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
关于格式化的每一步具体的操作命令的解释,我这里就不再赘述咯,老师文件中是存在的。
由于我使用的是老师这边提供的该系统,今天重新进行的测试,所以这一部分是没有出现文档中所提及到的错误的
到此为止,我们关于sd卡这边Uboot的编译烧写就结束了
额、关于DNW工具其实更多像是一个驱动,所以原理还是一样,编译源码,执行安装DNW到Linux,这里注意的一点就是,安装到Linux下滴,而不是安装到开发板,因为在Linux下我们需要安装一个DNW驱动用于让我们的LInux与开发板的Micro USB连接。
tar -vxf dnw_for_linux.tar.gz
1.1 secbulk.c内核模块编译
由于这里的secbulk.c文件中的主设备号与我们开发板连接的设备好号不同则这里需要对secbulk.c源程序进行修改
vim secbulk.c
cd secbulk/
make -C /lib/modules/`uname -r`/build M=`pwd` modules
sudo insmod ./secbulk.ko
dmesg
1.2 编译dnw工具
gcc -o dnw dnw.c
sudo cp dnw /usr/local/bin
到此dnw驱动便已经在我们的虚拟机中的LInux安装完成咯
在com串口的终端中输入命令,打开emmc
dnw 40000000
在Linux终端输入lsusb查询开发板的usb是否与Linux系统正常连接
lsusb
Bus 001 Device 013: ID 04e8:1234 Samsung Electronics Co., Ltd
这里的04e8就是我们的主设备号
ls /dev/s*
查询当前的外接设备中是否有 /dev/secbulk0如果存在表示 已经与开发板成功连接
开始程序烧录
mmc write 1 0x40000000 0 0x10
dnw 40000000
dnw -a 40000000 bl2.bin
mmc write 1 0x40000000 0x10 0x1C
dnw 40000000
dnw -a 40000000 u-boot.bin
mmc write 1 0x40000000 0x30 0x21D
dnw 40000000
dnw -a 40000000 sd_fuse/tiny4412/E4412_tzsw.bin
mmc write 1 0x40000000 0x2c0 0xB8
emmc close 1
这里我们只需将之间编译好的Linux源码程序搬运到当前的一个文件夹中即可
这里需要下载一下 以下的这几个文件镜像,用于qt的安装(文件在老师的云盘下即可找到)
额。这里出现了一个问题
fastboot无法启动