完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 charles_jinbao 于 2016-8-8 16:26 编辑
学习了几个字符设备驱动后,发现好像空中楼阁一样,理解无法深入,故将驱动学习先放一放,潜心研究下u-boot和linux内核。 首先是最底层的u-boot,先从移植学起,本次学习内容,u-boot第一阶段移植到mini2440(参考韦东山视频): uboot版本:u-boot-2012.04.01 linux环境:ubuntu 14.04 gcc版本: arm-linux-gcc 4.3.2 SOC: S3C2440 CPU:arm920t 1.在根目录board.cfg添加目标板卡信息smdk2440,用来配置make smdk2440_config smdk2440 arm arm920t - samsung s3c24x0 2.创建目标板卡目录和头文件:从board/samsung/smdk2410拷贝至board/samsung/smdk2440,include/configs/smdk2410.h拷贝至include/configs/smdk2440.h make编译之后无输出 3.程序从start.S启动,arch/arm/cpu/arm920t/start.S分析 a.设置异常向量地址: b.跳转到入口执行第一阶段初始化函数:start_code: 设置cpu工作在svc mode->重定位异常向量(针对AT91RM9200DK和AT91RM9200EK,故这段不执行)->关看门狗->关中断->设置时钟分频系数->跳转到cpu_init_crit->I/D cache使能->disable MMU stuff and caches(应该是关MMU,没太搞明白)->跳转lowlevel_init(board/samsung/smdk2410/lowlevel_init.S SDRAM初始化)->call_board_init_f(arch/arm/lib/board.c)很复杂,主要是分配SDRAM地址空间,然后重定位代码段->跳转到board_init_r(第二阶段代码)。 lowlevel_init函数中用到HCLK,此时MPLL还未设置,故SDRAM初始化失败,在设置时钟分频系数之后添加MPLL设置。 make编译烧录,输出乱码,解决办法:arch/arm/lib/board.c/board_init_r中找到serial_initialize,发现get_HCLK()中定义的是S3C2410,故在include/configs/smdk2440.h添加#define CONFIG_S3C2440 去掉#define CONFIG_S3C2410,编译后nand报错,去掉#define CONFIG_CMD_NAND,编译成功,串口输出正常 |
|
相关推荐
|
|
飞凌嵌入式-ELFBOARD 硬件知识分享-ELF 2电源电路讲解
563 浏览 0 评论
1515 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
1357 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
793 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
1239 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:16 , Processed in 0.435535 second(s), Total 40, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号