S3C6410嵌入式应用平台构建(一)
【2014-4/8~4/10】目前我们已经积累一定的嵌入式相关知识,对嵌入式的架构及开发过程有了大体了解,唯一缺的就是实践,通过自己的分析搭建自己的嵌入式系统。下面,我将从此处开始记录我和我同学一起分析和实践的过程,我们利用下班回来的2~3个小时来一起分析及讨论,实践,对嵌入式的搭建过程中的细节进行分析,有些地方是借鉴别人,但我们肯定是先消化在去使用及优化。
之前我已经写了一篇博客关于Uboot移植到OK6410,但那是参照网上牛人移植的,说实话,当时并没有理解他为什么要那么修改,只是盲目的修改、修改,虽然移植的Uboot启动起来了,但是我对里面的细节并没有深入的去分析,这是我在大学时的失误,如今,借用工作之余的时间来详细分析分析,同时在后面也将借用搭建好的平台做小开发,希望我们能成功!
在我看来,基本的嵌入式平台除了硬件之外,系统方面的分为以下几个部分:
1. Bootloader----这个我们选择uboot,从网上下载通过修改相应代码适应我们的开发板
2. Linux Kernel----这就是Linux的移植了
3. 文件系统构建----这项涉及到Busybox,构建基本的Linux文件系统,Yaffs2文件系统较好
4. Qt界面----这上上层的了,后面应用程序基于此开发
5. 各种外设驱动
以上也是我们所要做的内容,看起来事情比较多,不过我们先一步一步来,先从Bootloader开始。
一、Uboot移植
基本的就不说了,可以先看下我之前写的那篇,有大概架构后,现在我们从零开始。
1. 准备工作。准备好源码,从官方FTP上下载的,把代码里面与arm无关的代码删掉,也就是说把以下代码路径,这样方便分析及减少代码量。
u-boot-2010.03\下lib_xxx只保留lib_arm 和 lib_genic
u-boot-2010.03\board下面只保留SAMSUNG
u-boot-2010.03\cpu下只保留arm开头的目录
u-boot-2010.03\include下asm_xxx只保留asm_arm 和 asm_genic
u-boot-2010.03\include\configs下只保留smdk开头的文件
在board\samsung、include\asm-arm\arch-s3c64xx、include\configs、nand_spl\board\samsung各目录下分别拷贝一份6400的并命名为6410,然后在进去修改后的文件中将其中的6400替换为6410,注意这里需要自己掂量了,需要保证替换后能编译过,没编译过说明就是没有替换正确。
修改根目录下的Makefile,仿照6400的配置,添加6410。详细的可以在前篇文章看看。
后面执行:make smdk6410_config;make
编译成功后,在根目录下会生成uboot.bin
-------------------------------------------------------------------------------------------------------
在此顺便带下:OK6410烧写uboot的方法:
(1)准备好已经按飞凌要求刻写的sd卡,其实就是把飞凌自己的uboot刻写到sd卡,调整开关使从sd卡启动
(2)连接好串口和usb,我们通过usb进行数据传输,打开dnw并配置好,开发板上电,按下空格键停在uboot命令状态下,进行下面操作:
smdk6410# dnw 50008000 (利用dnw下载到SDRAM内存当中),如果USB驱动装好后提示可以传输了,点菜单栏中找trasmit传输
smdk6410# nand erase 0 100000 (传输完成后,利用飞凌uboot命令,将nand flash的 0~1M空间擦除)
smdk6410# nand write.uboot 50008000 0 100000 (用write.uboot命令 将下载到内存中的uboot.bin写到nandflash 0~1M空间)
断点再上电,就可以了。
-------------------------------------------------------------------------------------------------------
2. 第一步修改:
为了验证自己的uboot是否能启动,因此修改lowlevel.S中初始化LED操作,对应OK6410,将所有的LED点亮,做如下修改:
/* LED on only #8 */
ldr r0, =ELFIN_GPIO_BASE
ldr r1, =0x0001111
str r1, [r0, #GPMCON_OFFSET] ldr r1, =0x000aaa
str r1, [r0, #GPMPUD_OFFSET] ldr r1, =0x0000
str r1, [r0, #GPMDAT_OFFSET]
就这样,编译后烧写,发现上电启动,灯居然没有点亮!!!!!!!!!!!此时已经晚上1点了,算了,太晚,明天继续。
按理说,s3c6410在上电后,利用8K stepstone,会自动的将nandflash中的前8K,复制到内部SDRAM中去执行,也就是说至少等应该会点亮吧。
第一步猜想:
将lowlevel.S中的led操作复制到start.S的reset后面,这样应该会点亮吧,start都是第一个执行的,后面在烧写验证,依然是不亮。奇怪了!!!!!!
第二版猜想:
第二天,同学突然提醒说,字链接脚本当中,要把lowlevel.o放在cpu_init.o后面,我回去查看了下根目录下的u-boot.lds,果然没有将lowlevel.o放在前面,经过修改如下:
. = ALIGN(4);
.text :
{
cpu/arm1176/start.o (.text)
cpu/arm1176/s3c64xx/cpu_init.o (.text)
------------------add----------------------------
board/samsung/smdk6410/lowlevel_init.o (.text)
lib_arm/board.o (.text)
------------------end---------------------------
*(.text)
}
但是在source_insight下搜索u-boot.lds,发现有三个,不清楚要修改哪个?后面经过多次实验,终于弄懂了。
原来,/根目录下的u-boot.lds是编译的时候链接生成的,依赖的是\board\samsung\smdk6410下面的u-boot.lds,因此我们只需要改这个文件就可以了,那么根据以上的链接脚本,我们也弄清为什么之前直接把led操作放在start.S中依然不亮了。。。。因为在start.S时,cpu还没有开始初始化,led当然不会亮了,如果我们放在cpu_init.o后面,点灯当然会亮了。
总结:
通过以上的实验及分析,理解了2点:
(1)s3c6410上电后,利用8K stepstone,会把nandflash前8K 复制到内部的8K sdram中,并跳到此位置去执行,如果想看点灯效果,需要在链接脚本当中去设置代码的存放位置,在8K以内;
(2)根目录下的u-boot.lds链接脚本是通过 \board\samsung\smdk6410下的脚本生成的,如果要修改链接脚本,我们要修改该目录下的才会有作用。
今天就写这点吧,目前才刚开始,点灯是我们的第一步,相当于开始学编程的写hello world一样,虽然这是小问题,但然我们懂了很多。下一篇,我要记录下对u-boot的分析过程了。
S3C6410嵌入式应用平台构建(一)的更多相关文章
- S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件制作)
本文主要讲怎用利用yaffs2工具和busybox制作yaffs2文件系统镜像.大多数都是参照网上的,目的在于记录学习,不做任何用途. 一.制作mkyaffs2image工具 进入yaffs2源码目录 ...
- S3C6410嵌入式应用平台构建(三)
构建了好久的系统,由于工作原因,没有及时写记录,目前我已经进展到构建yaffs2文件系统,启动Linux内核了.Uboot移植基本功能已经完成. 由于Uboot移植方法大致是一样的,我主要参考这位博友 ...
- S3C6410嵌入式应用平台构建(五)——linux-3.14.4移植到OK6410-(Nand分区问题)
前一篇文章,我们的Linux能后启动了,只是在识别nand时候,没有获取到时钟源,导致后面的分区没哟进行. 我们从启动的log发现: [06/08-11:25:41:371]s3c24xx-nand ...
- S3C6410嵌入式应用平台构建(四)——linux-3.14.4移植到OK6410-(初步启动)
这次,还是把基本的基于我目前最新的Linux源码进行移植到OK6410吧,同时也写下我移植过程中遇到的问题及解决方法,不过有些方法是借鉴网上的,有些是自己加的,会有一些小bug. 一.基本工作 1. ...
- S3C6410嵌入式应用平台构建(二)
[2014-4/11~4/14]经过之前的实验,对Uboot已经有了大体的了解,前我们已经把led灯给点亮,但这不是我们的根本目的,我们是要进入boot启动,经过两天的分析代码和反复的实验,终于可以进 ...
- Unity跨平台C/CPP动态库编译---可靠UDP网络库kcp基于CMake的各平台构建实践
1.为什么需要动态库 a)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. b)某 ...
- 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
大家好 , 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目 . 对 , 用 物理服务器 和 .Net 平台 构建 云平台 . 通过 .Net 构建 分布式 计算集 ...
- SharpGL学习笔记(一) 平台构建与Opengl的hello World
(一)平台构建与Opengl的hello World OpenGL就是3d绘图的API,微软针和它竞争推出D3D,也就是玩游戏时最常见的DirectorX组件中的3d功能. 所以不要指望windows ...
- Unity3D跨平台动态库编译---记kcp基于CMake的各平台构建实践
一 为什么需要动态库 1)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. 2)某 ...
随机推荐
- sql按in中集合排序
1.SELECT * from tbLabelResRelation WHERE lId in(32,18,27,19) order by FIND_IN_SET(lId ,'32,18,27,19' ...
- 对于一些css样式的巧妙方法进行总结。
针对之前遇到过的一些特殊样式的实现,我今天做个总结,目的有二:一是将这些方法记录下来,以便将来需要用到时查找使用.二为将这些大神们智慧的结晶发扬光大,让广大前端程序猿们能够少走弯路.此贴为更新帖,以后 ...
- SQL Server Primary key 、clustered index 、 unique
primary key: 1.主键不可以有空值. 2.不可以有重复行. unique : 1.可以有空行. 2.不可以有重复行. clustered index: 1.可以有重复行. 2.可以有空行. ...
- 利用OpenCV和MFC对话框建设一个有滑动条控制的播放器--转
(一)问题的提出: OpenCV有一个很简单的播放视频文件并加载滑动条的程序,但是如何用MFC对话框来创建一个有滑动条控制的播放器呢,网络上四处搜索都没有代码可以参考,下的都是些骗子链接文件,很过分, ...
- poj2521---lose money
#include <stdio.h> #include <stdlib.h> int rever(int n) { return -n; } int main() { int ...
- poj1936---subsequence(判断子串)
#include<stdlib.h> #include<stdio.h> int main() { ],t[]; char *p1,*p2; while(scanf(" ...
- MySQL数据处理函数
数据处理函数 有时从数据库表中获取到的数据须要进行一些处理. 如将小写字母替换为对应的大写字母.这个处理过程能够在客户机上进行.也能够在数据库上进行. 数据库上进行会更高效.数据库中有对应的数据处理函 ...
- JQuery让input从disabled变成enabled
JQuery让input从disabled变成enabled document.getElementByIdx_x("removeButton").disabled = false ...
- DataReader转泛型
实体类的字段类型要和数据库一致,不然可能会出现错误. /// <summary> /// DataReader转泛型 /// </summary> /// <typepa ...
- swipe.js文档及用法
最近的一个项目中使用到了swipe.js这个插件 感觉非常的好用的 官方网站 http://swipejs.com/ https://github.com/bradbirdsall/Swipe 简介 ...

. = ALIGN(4);