S3C2440 ARM设备驱动(boot loader,kernel,rootfs)

一、开发板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(Universal Boot Loader)是一个开源的引导加载程序,用于嵌入式系统。它提供了丰富的功能,如硬件初始化、操作系统加载、网络支持等。U-Boot可以配置和编译成适合不同硬件平台的版本。
        U-boot下载
        链接好开发板(J-Link),利用J-Flash软件下载U-boot框架

uboot.bin是U-Boot的二进制镜像文件,它在嵌入式系统中扮演着重要的角色,负责系统的启动和初始化。将uboot.bin下载到NOR Flash中是嵌入式系统开发中常见的操作之一。

        

        单机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 客户端启动
          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操作系统启动成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值