上一节中bsp已经安装,交叉环境已经搭建,理应就可以正常的编写上层的应用程序啦。
但是系统启动次序是- uboot-> kernel内核 ->挂载文件系统 ->上层应用程序
下面是bsp安装后的文件:
因此本章节,将讲解 uboot-> kernel内核 ->挂载文件系统 等的官方源码编译
有一个问题:新唐官方在github,gitee,gitlab都有源代码,但是很多事网速和墙的原因,访问可以会出现问题,可以参考
国内gitee:OpenNuvoton - OpenNuvoton
github:
https://github.com/OpenNuvoton/MPU-Family
-
官方源码编译
3.1编译Uboot
进入uboot源码目录 cd u-boot-2016.11/
在目录的configs文件下有很多的配置文件。 ls configs/nuc980*
查到与980相关的配置有三个。
随便选一个,开始编译。
make nuc980_defconfig
make
编译结束,会生成u-boot.bin 及 spl/u-boot-spl.bin
3.2编译Linux Kernel
BSP安装之后会获取到官方的linux kernel。
进入源码目录:cd linux-4.4.y/
查看配置文件 : ls arch/arm/configs/nuc980*
选一个进行配置:make nuc980_defconfig
现在还不能直接编译,会报错找不到文件系统。
到之前下载bsp目录下,将rootfs拷贝到kernel源码同级目录。
官方配置的ramdisk镜像,文件系统会和kernel一起被打包。同时在kernel同级目录创建image文件夹 : mkdir ../image
安装软件: sudo apt-get install u-boot-tools
编译内核镜像 :make uImage
编译完成,生成镜像文件
3.3 烧录准备-安装虚拟串口的驱动
首先安装驱动,....安装完成
这个时候插上USB,应该可以正常识别出一个设备
一定要把这一步实现, 不管使用哪种方式启动,下载镜像始终是要USB的。
3.4 启动方式
NUC980支持4种启动方式
目前板子上有SD卡、SPI FLASH以及NAND FLASH的接口。
先打开原理图。
首先看原理图,在板子上有两个拨码开关。
连接着上图所示的IO口
数据手册上:
启动整理如下:
主要关注的是PG0和PG1,上电的不同方式决定了四种启动形式
然后比较重要的是PG3和PG5。PG3管的是看门狗,PG5管的是调试串口。
那么作为一个开发者,PG3和PG5应该都是在ON的位置
3.5USB启动方式
阅读USB启动方式的程序流程图,可以知道,数据被下载到了DRAM里面,这种方式应该是用于调试,一旦断电就会丢失数据。
连接PUTTY,使能串口,方便调试
打开终端,成功设置为USB启动,串口终端将有类似 如下的打印:
接下来,确定USB正常工作;打开烧录软件;连接设备;
随便选个bin文件过来,放心刷,反正是在dram里面,掉电就没了的
看终端信息
3.6 NAND启动方式
之前编译了uboot和kernel,现在可以使用那些固件了
首先把之前编译的内容拿到桌面
一共是四个文件,设置启动方式为nand,通过串口终端确认如下:
打开烧录软件
烧录u-boot-spl.bin
烧录uboot.bin
烧录kernel
文件系统的烧录可以根据自己的需要进行(需要启动后mount),
烧录完成 ,然后复位,启动
没有跑起来,不要紧,看调试信息,有个时间输出,可以证明烧录是正常的
找个正常的镜像,再来一次
正常启动,这里还有个配置过程,先不管,后面再说
3.7 Linux内核启动
前面已经将镜像烧录进了nand
但是没有启动,因为还有一个配置过程(没有环境变量的参数文件)
以NAND启动方式,进入putty
从nand里面读取数据到DRAM运行
nand read 0x7FC0 0x200000 0x800000
启动
bootm 0x7FC0
就 正常进入
这种方式 时不常用的;缺乏env和文件系统的实现,后续再跟进讲解!
正常编译好之后,如何打包,并且进行烧录,可以参考如下教程:https://blog.csdn.net/xiaoxilang/article/details/133675267
最后可以实现一键烧录,才是便于量产的方式!!!!