u-boot移植和linux内核分析
1.u-boot目录结构
平台相关
arch,board,include…
平台无关
common,net,fs,drivers…
工具和文档
tools,doc
2.u-boot启动流程
首先启动flash中的程序
初始化硬件
(关闭看门狗,中断,cache)汇编语言阶段
(开启时钟,串口,flash,内存)
自搬移u-boot到内存
准备栈
大部分硬件初始化
c语言阶段
搬移内核到内存
性能提升
3.移植方法
选择官方源码版本下载,配置编译
a.指定交叉工具链
b.指定cpu和board
c.编译0x00000000
实现串口信息输出
a.跟踪运行路径
b.串口输出
网卡移植
a.寄存器地址
b.参数设置
1.linux内核的特性
(1)免费开源
(2)可以移植,支持广泛的硬件平台
(3)高稳定性,高可靠性
2.linux内核子系统
1)进程管理
2)内存管理
3)文件系统
4)网络协议
5)设备管理
编译内核:make
uImage
编译设备树:make
dtbs
3.linux内核结构代码
init
kernel
mm
ipc
与平台无关
lib
fs
net
drivers
char,usb,block,pci
设备树(底层硬件引脚信息)
4.内核运行流程
a.自解压内核dacompess(arch/arm/boot/compressed/head.S)
b.运行内核汇编部分head.S入口stext(arch/arm/boot/compressed/head.S)检测合法性(CPU类型,机器类型)
c.运行内核C部分start_kernei(init/main.c)
CPU,机器参数的安装
setuo_arch
中断,定时,终端,内存等最基本的初始化
创建核心进程kernel_init运行,启动多任务调度
d.挂载rootfs
e.运行第一个应用程序init(一般是linuxrc)
5.内核调试方法
printk打印输出信息
puts(内核解压前)
printascii(console初始化前)
printk(内核解压后,信息输出显示是在console初始化之后)
通过proc在运行时查看和修改日志级别
--catproc/sys/kernel/printk 显示4
4 1 7
--echo
“7 4 1 7”> proc/sys/kernel/printk
--catproc/sys/kernrl/printk
u-boot和内核移植步骤
1,启动时按空格
2,执行printenv,查看uboot网络配置。 过程: 一,# setenv ipaddr 172.16.6.100 二,#
setenv serverip (你的主机IP地址) 三,#setenv netmask 255.255.255.0 四,#setenv gatewayip 172.16.6.1 五,#saveenv 六,#
printenv 重新查看uboot环境。
3,修改主机IP,使得XP的IP和uboot在同一网段之内。
4,将u-boot.bin
zImage 复制到tftpd32同一目录中。
5,启动tftp32
烧写u-boot:
6,tftp 0x50008000 u-boot.bin ;下载
7,nand erase 0x00000000 0x200000 ;擦除u-boot分区
8,nand
write.uboot 0x50008000 0x00000000 0x100000 ;将u-boot写入flash分区中。
烧写内核:
9,tftp0x50008000 zImage
10, nand erase 0x200000 0x400000
11, nandwrite.e 0x50008000 0x200000 0x400000
注意:u-boot
zImage是在虚拟机中编译出来的
busybox