S5P6818-通过SD卡启动裸机程序
前言
由于自己第一次发表文档,对于文档的架构还需多多练习。写文档的目的是想通过记录自己的学习过程,以便以后使用到相关的知识点可以回顾和参考。
一、运行裸机程序的方式
大概分成两种:1)在uboot模式下,使用go直接跳转到程序链接的地址来跑程序。
2)制作SD启动卡,在SRAM中把整个启动过程需要做的事情,例如初始化PLL等做一遍,再去跳转到SDRAM(即DDR)中链接的地址那里跑程序
区别是:如果对新手来说,使用第一种方式,相对来说比较简单方便,但是不利于了解整个启动过程是怎么个流程的,只能通过观察外设的一些现象,变化来知道自己的程序有没有跑成功。但使用第二种方式的话,就能更加深入了解到裸板的整个启动过程:上电 -> IROM -> Nsih -> 2nboot ->用户程序.bin。其实这个用户程序.bin对于跑上Linux的板子来说就相当于uboot,跑上Linux内核的启动过程:上电 -> IROM -> Nsih -> 2nboot ->uboot -> linux kernel。
二、分析s5p6818的SD卡启动流程

通过数据手册可以知道,从SD卡的第二个扇区(对程序员来说是第一个,原因你懂的,1前面还有0)开始复制56KB的数据到内部IRAM中执行,在下面的操作中,我在这56KB的空间里进行了系统环境的配置和初始化,即执行Nsih和2nboot的内容,然后把用户程序复制到SDRAM中,pc指针跳转到DRAM中程序的链接地址(0x40000000)处开始执行用户程序。
三、制作SD启动卡步骤
1.编译得到用户程序.bin
通过arm-linux-gcc、arm-linux-ld、arm-linux-objcopy等交叉编译得到.bin程序,其中使用arm-linux-ld链接时需要自己编写一个链接脚本.lds,链接到板子的SDRAM(0x40000000)中执行用户程序,因为我的板子的DRAM范围是0x40000000-0x80000000,共1GB,每个板子都不一样的,具体要去查一下。

2.加入Nsih,2nboot(头部信息)
使用mk6818把Nsih和2nboot加入到用户程序.bin里面,制作出一个包含初始化内容的.bin。
sudo ./mk6818 xx.bin(最终.bin) nsih.txt 2ndboot xxx.bin(用户程序.bin)。
其实nish和2nboot里面的东西就是制作中断向量表、PLL初始化、各种外设时钟初始化、DDR配置等内容,都是一些系统环境的配置。

mk6818是一个用c写的一个可执行文件,它的作用就是把上面提到的3个文件制作成一个最终的.bin文件,其中里面有段代码是关于引导的程序启动地址的,需要把它改为板子的SDRAM地址

3.把最终的.bin文件烧写到SD卡中
首先使用fdisk把sd卡重新分区,然后使用mkfs格式化成FAT32的类型,最后烧写.bin到sd卡
sudo ./6818-sdmmc.sh /dev/sdc xx.bin(最终.bin)
6818-sdmmc.sh是一个烧写的shell脚本,作用就是把最终的.bin文件(在带有Linux内核的板子中又叫引导镜像文件即uboot)烧写到sd的扇区中。

dd if=" x b o o t " o f = " {xboot}" of=" xboot"of="{dev}" bs=512 seek=1 conv=sync
//xboot即源文件xx.bin,dev即sd卡设备文件sdc,bs=512指定一个块的大小为512Byte,seek=1从sd卡设备文件的第一个块开始写入,因为第0个块是关于sd的一些引导信息,千万不能修改,conv=sync每个块都填充512个Byte,不足以NULL字符补齐。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
