一、嵌入式软件三大模块

优点:linux可移植性高,可以根据自己功能进行相应的裁剪。

1.图解

嵌入式中使用docker_内核


(2)文字描述:

(1)bootloader:

功能:初始化cpu,内存,硬盘以及时钟电路,将内核从flash加载到内存中

存储的位置:存储在flash(上限为4K),运行的时候跳转到内存上。

生成方式:uboot 生成bootloader,通过JLINK硬件+jflash软件烧到板子的NORDFLASH中.

查询网站:

(2)kernel:内核

功能:进程管理,设备管理,内存管理,文件管理,网络协议

存储的位置:存储在flash,运行在内存上

生成方式:GNU内核源码

查询网站:

(3)rootf:根文件系统

功能:进行系统配置(文件的组织方式)ext3 yaffs jsffs2

存储的位置:内核会自动挂载跟文件系统

生成方式:busybox生成根文件系统

查询网站:

2.三个步骤加载过程

1.系统启动:

1.使用jlink烧录uboot到norflash---------------------bootloader:操作
1)安装jlink然后在window下打开
2)打开项目.jfalsh-------->选择系统
3)打开文件uboot--------->选择uboot.bin文件
4)按F7或者target选项点击Auto

安装成功之后:显示板子信息

CPUID: 32440001
	FCLK:      400 MHz
	HCLK:      100 MHz
	PCLK:       50 MHz
	DRAM:  64 MiB
	WARNING: Caches not enabled
	Flash: 0 KB
	NAND:  256 MiB
	In:    serial
	Out:   serial
	Err:   serial
	Net:   dm9000
提示:SMDK2410 #

uboot指令:
uboot的作用–》为内核运行做环境准备(初始化核心硬件,功能硬件),加载引导内核
uboot的使用:
(1)printenv:查看环境变量的指令
(2)setenv ipaddr 192.168.0.252 :修改环境变量参数
(3)saveenv:保存修改到falsh
(4)ping 192.168.0.180 ping到自己的服务器上
波特率:baudrate=115200,

2.加载内核:

printenv:查看环境变量的指令,显示板子信息
bootargs:内核参数:指定根文件的位置。开发阶段的在电脑,开发完成在flash
	bootargs=root=/dev/nfs(传输方式) nfsroot=192.168.1.235:/home/linux/rootfs(nfs服务器路径 ) ip=192.168.1.110 (板子IP)console=ttySAC0(终端),115200
	bootcmd:当bootdelay减为0时,自动执行的指令
	bootcmd=nand read 30000000 kernel;bootm 30000000
	bootdelay:自启动模式和交互模式的等待时间,减为0之前回车进入交互模式:
	bootdelay=5
	ethact=dm9000
	ethaddr=00:0c:29:4d:e4:f4
	fileaddr=30008000
	filesize=238FF4
	ipaddr:ARM板Ip地址
	ipaddr=192.168.1.110
	mtddevname=u-boot
	mtddevnum=0
	mtdids=nand0=jz2440-0
	mtdparts=mtdparts=jz2440-0:256k(u-boot),128k(params),2m(kernel),-(rootfs)
	netmask=255.255.255.0
	partition=nand0,0
	ftp:互联网的网络下载协议
	thtp:局域网的网络下载协议
	serverip:(tftp)服务器Ip电脑的ip地址
	serverip=192.168.1.91
	stderr=serial
	stdin=serial
	stdout=serial
	Environment size: 544/131068 bytes

	image内核的机械码:
配置tftp中有可能会出现的问题
1)time out :超时问题一般重启虚拟机就可以解决
2)权限问题:把要传输的文件权限改为 777
		chmod 777 文件名
3)不能再根路径下权限不够
	1.在电脑上配置tftp服务器:指令一个文件被下载:
配置文件:sudo vi /etc/default/tftpd-hpa
2.修改服务器的Ip:
setenv serverip 192.168.xxx.xxx
3.从serverip的ubuntu下载ulmage文件到arm开发板的flash(掉电保护):
注意:下载的时候需要改文件的权限:
chmod 777 文件名:
tftp 0x30008000 uImage

3.根文件的加载:

出现的问题
1)解压压缩缩包的时候时候要加sudo
	2)最后配置参数命令要输入正确
现象:加载的一半会卡住,不能继续输出,而且不能再像命令行输入

1.解压到nfs共享路径下
sudo tar zxvf /文件名FileName.tar.gz
2.设置文件路径:
打开配置文件:sudo vi /etc/exports
设置路径:/home/linux/nfs/rootfs  *(rw,sync,no_subtree_check)
3.在arm板上设置:
设置arm配置参数:
setenv bootargs root=/dev/nfs   nfsroots=192.168.0.180:/home/linux/nfs/rootf
ip=192.168.0.xxx   console=ttySACO,115200
       |
板子ip
setenv bootargs
root=/dev/nfs  nfs方式挂载根文件方式
nfsroot=192.168.0.180:/home/linux/nfs/rootf   共享文件的主机和路径
ip=192.168.0.xxx   板子ip
sonsole=ttySACO.115200  以终端的方式打印    

4.bootm 0x30008000
1.jlink+jflash烧录uboot.bin到norflash
	2.uboot加载内核到开发板中,通过tftp端口号为69(局域网文件下载协议)协议下载Uimage到开发板内存的0X300080000
	uboot的作用--》为内核运行做环境准备(初始化核心硬件,功能硬件),加载引导内核
	uboot的使用:
		uimage 可以存放在两个位置
		(1).产品阶段-->nandflash
		(2).开发阶段-->pc
			可以通过USB、网络、串口方式加载
	uboot指令:		
	(1)printenv:查看环境变量的指令
	(2)setenv ipaddr 192.168.0.252 :修改环境变量参数
	(3)saveenv:保存修改到falsh
	(4)ping 192.168.0.180 ping到自己的服务器上

3.uboot编译

uboot编译---》u-boot.bin

uboot源码目录:
common : 指令源码
U_BOOT_CMD(bootm, CONFIG_SYS_MAXARGS, 1, do_bootm,指令函数
arch :体系结构相关代码目录
arch/arm/cpu/arm920t/start.S uboot的入口代码
board :平台相关代码
board/samsung/smdk2440/smdk2410.c —》平台相关代码
tools 工具源码
drivers :驱动代码
lib:公用代码
include include/configs/smdk2440.h
每一个平台都有一个***.c ***.h
boards.cfg 板子支持列表
确定工具链
CROSS_COMPILE=arm-linux- 工具链
编译:
1.确定平台
make smdk2440_config
make NAME_config —》NAME在boards.cfg中确定
生成include/config.h include/config.mk文件
2.make 编译程序
为uBOOText2是文件系统类型

使用catgs 查看代码
cats -R 生成tags文件

vi -t do_bottom 搜索
ctrl + j 追代码
ctrl + o 返回
readelf -h a.out 查看elf格式文件头信心,阿看是哪个编译器
size +查看分段大小
arm 的可执行程序.bin结尾