一、开发板Linux启动需求
1、bootloader
为内核启动准备环境,并引导内核启动
2、kernel(linux内核)
操作系统的核心,(狭义上的操作系统)
3、rootfs
一堆有组织的文件
1. bootloader(一个裸机程序)
初始化CPU(工作模式)
初始化栈
初始化异常向量表
初始化时钟
初始化内存
关闭Cache
关闭MMU
关闭中断
关闭看门狗
初始化相关外设(串口、flash、网卡)
集成相关的协议
搬移内核到内存
向内核传参(根文件系统类型、位置,终端,ip, 指定init进程)
启动内核 --- CPU的控制权彻底移交给内核,bootloader不再控制CPU
2. kernel(一个复杂的程序)
文件管理 ,内存管理 ,进程管理, 网络管理 ,设备管理
启动到最后阶段时:加载(挂载)根文件系统
3. rootfs根文件系统(一堆文件的集合)
系统命令
服务和用户程序
配置文件, 库, 普通文件(文本,图片,MP3)
二、启动过程
1. bootloader启动
Norflash: norflash被接在0地址处,PC复位后默认为0,可以直接执行norflash中的程序(bootloader),bootloader搬移内核到内存,并启动内核
Nandflash:系统上电后,会自动搬移nandflash中的前4KB代码到IRAM中,并将0地址映射到0x40000000(IRAM的首地址,PC实际指向0x40000000)
bootloader必须在自己的前4KB代码中完成内存的初始化,并搬移自己剩余的部分到内存,运行自己剩余部分,搬移内核到内存,并启动内核 IRAM 4KB
2. 内核启动
Nandflash:bootloader读取nandflash中的内核,写入到内存的0x30008000地址处,传递参数给内核,启动0x30008000地址处的内核
Ubuntu: bootloader通过tftp服务下载内核到内存的0x30008000地址处,传递参数给内核,启动0x30008000地址处的内核---内核文件必须存在于 ubuntu的tftp服务目录下
3. rootfs挂载
Nandflash:直接挂载nandflash中的根文件系统
Ubuntu:通过nfs服务挂载到ubuntu的nfs服务目录
三、Linux启动准备工作
1. 下载一个bootloader到norflash中(uboot.bin)
U-boot下载
链接好开发板(J-Link),利用J-Flash软件下载U-boot框架
单机file,选择一个工程文件
单机Target,connect链接开发板,F6擦除norflash中数据,并重新装载
下载完成
U-boot功能验证
利用SecureCRTP软件验证,效果如下
打开软件,选择链接端口
开发板上电(复位)
2. 拷贝一个内核到ubuntu的tftp服务目录下(ubuntu已安装tftp服务)
tftp安装配置
在linux系统下执行命令:sudo apt-get install tftp-hpa tftpd-hpa
tftp功能验证
tftp serverip(服务端ip地址,多为Linux本机地址)或tftp进去后输入serverip
get filename (服务端相应目录下必须有该文件)
put filename (本地对应目录下必须有该文件,并且tftp服务端配置文件TFTP_OPTIONS选项支持,)
3. 拷贝rootfs到ubuntu的nfs服务目录下(ubuntu已安装nfs服务)
nfs 挂载安装配置
linux下执行以下命令
sudo apt-get install nfs-kernel-server(服务器)
sudo apt-get install nfs-common (客户端)
四、开发板Linux启动结果
1、Ubantu网络配置
1、查看虚拟机是否为桥接模式(不是则更改为桥接)
2、修改网络连接网卡(不要桥接wifi,桥接主机网卡)
2、printenv查看环境变量
1、与服务端ip一致
2、可以和开发板ip一致,也可以不一致,影响不大
3、初始化linux
4、网关IP和主机网关保持一致
5、开发板ip,网段号需与服务端ip网段号保持一致
6、子网掩码
7、服务端ip
3、检查连接情况
ping一下服务端ip地址,U-boot的ping是单向的。
4、下载uImage(内核文件)
在U-boot下输入命令:tftp 0x30008000 uImage
5、启动内核
在U-boot下输入命令:bootm 0x30008000
开发板linux操作系统启动成功