裸机启动流程

目录

初识开发板:

1裸机启动流程:

2烧录代码命令

3交叉编译工具

4编译点亮led灯的代码


初识开发板:

核心板:三星exynos4412猎户座系统芯片;CPU主频 1.4GHZ,基于ARM-cortex A9;四核处理器,同时处理四个进程;内部IROM:内部集成的一个存储的 64k;内部IRAM:256k;外部扩充ROM:4G存储空间,RAM:1G的内存空间。

底板:蜂鸣器:1个;UART口:3个;usb:2个;网口:1个;拨码开关:2个(左边控制电源,右边控制启动位置);IIC:4套;COM:4个;key:4个。

1裸机启动流程:

裸机启动流程_第1张图片

个扇区的大小是512B:

裸机启动流程_第2张图片

1 reserved:BL0三星写好的,我们不能操作的,不需要自己烧录;

详细步骤如下:

        1:失能看门狗 防止硬件复位

        2:关闭中断和内存保护单元

        3:刷新高速缓冲区

        4:是否让cpu进入空闲

        5:初始化栈

        6:初始化变量

        7:注册函数指针

        8:获取复位状态

        9:设置时钟

        10:判断启动方式

        11:根据判断的启动方式:去对应的存储介质去下载bl的代码

        12:下载并校验bl1代码

        13:运行bl1:下载并运行bl1

2 BL1:E4412_N.bl1.bin 三星提供好的  需要自己烧录

        1:初始化IRQ和SVC模式的栈

        2:判断是否为低功耗

        3:选择启动方式  下载BL2

        4:判断是否为从睡眠模式唤醒

        5:判断是否为安全模式

        6:校验BL2

        7:执行BL2:下载并运行BL2

3 BL2:可以自己定义

详细流程:

       1:初始化IRQ和SVC模式的栈

       2:设置时钟

       3:初始化内存

       4:判断是否为低功耗唤醒

       5:判断是否为睡眠唤醒

       6:选择启动方式

       7:判断是否为安全模式

       8:校验

       9:启动os

2烧录代码命令 

裸机启动流程_第3张图片

1、将sd卡插入电脑,被虚拟机识别

2、烧录bl1:

dd iflag=dsync oflag=dsync if=./ E4412_N.bl1.bin of=/dev/sdb seek=1

3、烧录bl2:

dd iflag=dsync oflag=dsync if=./bl2.bin of=/dev/sdb seek=17

3交叉编译工具

不同架构的程序不能通用

       交叉编译工具安装过程

       1:安装兼容库:

sudo apt-get install lib32ncurses5 lib32z1

       2:将arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz随便放个目录

       3:解压这个文件到根目录:

tar xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /

       4: 将交叉编译工具放到环境变量里,把这样一句话,添加到/etc/profile文件最下边

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin

       5:生效配置文件:

source /etc/profile

       6: 重启虚拟机:

reboot

       7:检验交叉编译工具是否正常:

arm-linux-gcc -v

4编译点亮led灯的代码

1:编译led只编译不链接:

arm-linux-gcc -c test.c -o test.o

2:指定内存中的0x02023400这个地址为这个程序的启动位置

arm-linux-ld -Ttext 0x02023400 -o test.elf test.o

3:将test.elf转换成二级制的程序:

arm-linux-objcopy -O binary test.elf test.bin

4:在可执行程序的最后加上偶校验

              1)生成加偶校验的工具:

gcc -o mkbl2 V310-EVT1-mkbl2.c

              2)对test.bin加上偶校验:

./mkbl2 test.bin bl2.bin 14336

5:烧录BL2:

dd iflag=dsync oflag=dsync if=./bl2.bin of=/dev/sdb seek=17

你可能感兴趣的:(驱动开发笔记,android,java,apache)