uboot 内核移植

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。