NUC972-Linux系统烧录过程
一、介绍:
nuc972开发板+EC21模块,实现PPP拨号。
二、相关知识:
BSP(board support package):板级支持包,介于主板硬件和操作系统之间的一层,属于操作系统的一部分。包含:U-Boot,Linux内核,交叉编译工具以及根文件系统。
u-boot(universal boot loader):系统引导,用于嵌入式系统的开机载入程序
nboot命令:完成NAND开机:内核影像烧录至NAND,偏移量为0x200000,读取到0x7fc0位置,再通过bootm命令完成Linux内核的开机。
2.1 驱动在Linux中地位
设备驱动是应用程序访问系统设备以及进行数据传递的桥梁和通道。
2.2 Linux内核模块
Linux 内核具有很强的可裁剪性,很多功能或者外设驱动都可以编译成模块,在系统运行中动态插入或者卸载,在此过程中无需重启系统。模块化设计使得 Linux 系统很灵活,可以将一些很少用到或者暂时不用的功能编译为模块,在需要的时候再动态加载进内核,可以减小内核的体积,加快启动速度,这对嵌入式应用极为重要。
2.3 Linux文件类型
2.3.1 七种文件类型
-
普通文件类型Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]
-
目录文件就是目录, 能用 # cd 命令进入的。第一个属性为 [d]
-
块设备文件块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b]
-
字符设备字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]
-
套接字文件这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型
-
管道文件FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
-
链接文件类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]
2.3.2 查看文件类型的三种方法
-
ls -l + 文件 ls-ld + 路径
-
file命令
-
stat命令:查看文件的详细属性
2.3.3 Linux中文件扩展名
linux里文件扩展名和文件类型没有关系。但为了容易区分和兼容用户使用windows的习惯,我们还是会用扩展名来表示文件类型。举例如下:
-
源码.tar、.tar.gz、.tgz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,zip等。
-
sh表示shell脚本文件,通过shell语言开发的程序。
-
pl表示perl语言文件,通过perl语言开发的程序。
-
py表示python语言文件,通过python语言开发的程序。
-
html、.htm、.php、.jsp、.do表示网页语言的文件。
-
conf表示系统服务的配置文件。
-
.rpm表示rpm安装包文件。
-
.img镜像文件
-
.ub文件影像文件
-
.config文件是linux内核配置文件,当执行#make uImage编译生成内核时,顶层的Makefile会读取.config文件的内容,根据这个配置文件来编译所定制的内核。
2.3.4 文件属性
ls命令(部分):
- ls -a 列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
- ls -l 列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
- ls -F 在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
- ls -s 在每个文件的后面打印出文件的大小。 size(大小)
- ls -t 按时间进行文件的排序 Time(时间)
- ls -A 列出除了"."和".."以外的文件。
- ls -R 将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
- ls -L 列出文件的链接名。Link(链接)
- ls -S 以文件的大小进行排序
- ls-h 人性化显示容量信息
- ls-i 列出文件或者目录的索引节点号
linux下文件的一些文件颜色的含义
绿色---->代表可执行文件,(绿色代表通行证的意思)呵呵
红色---->代表压缩文件
深蓝色---->代表目录
浅蓝色----->代表链接文件
灰色---->代表其它的一些文件
三、移植步骤
3.1 Uboot编译
arm-linux-gcc 等一些命令在/usr/local/*/bin下,
用export PATH=/usr/local/*/bin:$PATH命令添加进去
用echo $PATH验证
安装完毕
生成文件u-boot.bin;u-boot-spl.bin make distclean make nuc970_config make all
3.2 内核编译
(2)默认设置
make nuc972_defconfig Enable CONFIG_USB_SERIAL_OPTION [*] Device Drivers → [*] USB Support → [*] USB Serial Converter support → [*] USB driver for GSM and CDMA modems Configure Kernel to Support PPP [*] Device Drivers → [*] Network device support → [*] PPP (point-to-point protocol) support
make menuconfig 出现 Unable to find the ncurses libraries or the required header files.
解决:
1:sudo apt-get install ncurses-dev
2:重新make menuconfig
添加Yaffs2文件系统支持
General setup ---> [ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support File systems ---> [*] Miscellaneous filesystems ---> <*> yaffs2 file system support <*> Autoselect yaffs2 format <*> Enable yaffs2 xattr support Device Drivers ---> Generic Driver Options ---> <*> Nuvoton NUC970 FMI function selection Select FMI device to support (Support MTD NAND Flash) ---> -*- Memory Technology Device (MTD) support ---> <*> Command line partition table parsing <*> Caching block device access to MTD devices -*- NAND Device Support ---> -*- Nuvoton NUC970 MTD NAND ---> NUC970 NAND Flash pin selection (Port C) --->
Image uImage与zImage区别
内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件。
uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节(实际不是:未知原因)的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;
3.3 BusyBox制作文件系统
别忘了make install
1 参考:https://blog.csdn.net/zxw2580/article/details/81132651
2 在制作的文件夹里面,/etc/fstab加入
fstab文件详解:https://blog.csdn.net/richerg85/article/details/17917129
/dev/mtdblock2 /mnt yffs2 defaults 0 0
编译ppp-2.4.7
#./configure #make CC= arm-linux-gcc
编译成功后把chat目录"chat",pppd的"pppd",pppdump的"pppdump",pppstats的"pppstats"复制到/usr/sbin下。
3 配置拨号文件
mkdir /etc/ppp/peers sudo gedit quectel-ppp sudo gedit quectel-chat-connect sudo gedit quectel-chat-disconnect
添加内容:参考https://blog.csdn.net/zhaoxd200808501/article/details/72637695
sudo gedit wcdma sudo gedit wcdma-chat-connect sudo gedit wcdma-chat-disconnect
添加内容参考:https://blog.csdn.net/wwt18811707971/article/details/54291747
系统/var目录下 mkdir /var/run -p mkdir /var/lock -p
3.4 文件系统打包
参考:https://blog.csdn.net/zxw2580/article/details/81144551
3.5 烧录
注意地址与位置
烧录的环境变量:
bootcmd=set bootargs "noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M mtdparts=nand0:0x200000@0x0(u-boot)ro,0x1400000@0x200000(kernel)ro,-(user)"; saveenv; nboot 0x7fc0 0 0x200000; bootm 0x7fc0 (没有换行)
3.6 测试
拨号命令 pppd call wcdma & ping -I ppp0 202.108.22.5(百度)