一、嵌入式软件三大模块
优点:linux可移植性高,可以根据自己功能进行相应的裁剪。
1.图解
(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结尾