系统移植 uboot移植 7.3

news2024/10/5 14:44:17

给fs4412板子配置uboot

uboot激活流程
(arch/arm/cpu/armv7/start.S)
reset 
1.设置CPU模式为SVC

//在这里加点灯的代码。看程序的代码有没有执行//
ldr r0,=0x11000C40
ldr r1,[r0]
bic r1,r1,#0xf0000000
orr r1,r1,#0x10000000
str r1,[r0]

ldr r0,=0x11000C44
ldr r1,[r0]
orr r1,r1,#0x80
str r1,[r0]

/* set power refuse to accept signal of resetting */
ldr r0,=0x11000C00
ldr r1,[r0]
bic r1,r1,#0xf00
orr r1,r1,#0x100
str r1,[r0] 

ldr r0,=0x11000C04
ldr r1,[r0]
orr r1,r1,#0x4
str r1,[r0]


2.设置异常向量表

3.cpu_init_cp15 : 设置cp15协处理器
内存映射 关闭

4.cpu_init_crit
--> lowlevel_init//(board/samsung/fs4412/lowlevel_init.S):
if(uboot != ram)
{
-->system_clock_init
-->mem_ctrl_asm_init
}
uart_asm_init
tzpc_init

5._main(arch/arm/lib/crt0.S)
C运行环境的初始化和调用C函数
board_init_r(arch/arm/lib/board.c)
	设备相关初始化init
	for(;;) //进入命令行,等待命令,执行命令
		main_loop(); 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sHjhz3fh-1688559825925)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20230703133642156.png)]

编译的顺序:

make distclean(先清空以前的uboot.bin文件)
cp board/samsung/origen  board/samsung/fs4412
cp include/configs/origen.h include/configs/fs4412.h
make fs4412_config---------xxx.mk
make -j8
需要bl1 和 bl2
./build.sh

现象:板子灯亮了,闪烁,并且没有显示

思考:闪烁—>板子在不断重启

板子重启 <-- 电源模块收到复位信号 <-- 产生复位信号 <-- ???(程序异常)

在/* for UART */前有问题,发出了复位信号,让灯闪烁
解决办法:
找到电源模块,让电源模块不去接受复位信号
电源模块:S5M8767
找到function
GPX0_2 输出高电平

现象:板子的灯一直亮,但没有显示
思考:复位问题解决,交互问题没有解决
超级终端无显示:串口有问题

检测之后是系统的波特率有问题不一定是分配了100MHZ

解决办法:
串口初始化:lowlevel_init.s中找	

ldr r0, =EXYNOS4_CLOCK_BASE

/* UART[0:4] */
	ldr	r1, =CLK_SRC_PERIL0_VAL
	ldr	r2, =CLK_SRC_PERIL0_OFFSET
	str	r1, [r0, r2]   

/* CLK_DIV_PERIL0: UART Clock Divisors */
	ldr	r1, =CLK_DIV_PERIL0_VAL
	ldr	r2, =CLK_DIV_PERIL0_OFFSET
	str	r1, [r0, r2]  
	
复制粘贴在 bl uart_asm_init之后

并且@bl tzpc_init

现象:有显示,可以交互了,但是ping、tftp 网络命令都没有

思考:uboot网络命令丰富–> common–>cmd_net.c—> ping 有---->有 CONFIG_CMD_PING宏控制–>借鉴别人(板子的头文件中打开)

解决办法:

1、增加命令:
fs4412.h中修改

#define  CONFIG_CMD_PING
#define  CONFIG_CMD_NET

现象:可以ping命令,但是卡死,终端上net报错

net initialization skipped

思考:网络初始化错误

解决:

2、增加网络初始化
origen.c中增加
{
	#ifdef CONFIG_DRIVER_DM9000
	int board_eth_init(bd_t *bis)
	{
		return dm9000_initialize(bis);
	}
	#endif
}

fs4412.h中增加
{
	#ifdef CONFIG_CMD_NET
	#define CONFIG_DRIVER_DM9000  1
	#define CONFIG_DM9000_BASE    0x05000000
	#define DM9000_IO      			CONFIG_DM9000_BASE
	#define DM9000_DATA    			(CONFIG_DM9000_BASE + 4)

	#define CONFIG_ETHADDR 			11:22:33:44:55:66
	#define CONFIG_IPADDR  			192.168.12.251
	#define CONFIG_SERVERIP        	192.168.12.147
	#define CONFIG_GATEWAYIP      	192.168.12.1
	#define CONFIG_NETMASK 			255.255.255.0
	#endif

}

3、增加SROM设置
在fs4412/origen.c 增加:
在board_init中增加:
{
	#ifdef CONFIG_DRIVER_DM9000
    dm9000aep_pre_init();
	#endif
}

在fs4412/origen.c 增加:
{
	#ifdef CONFIG_DRIVER_DM9000
	#define EXYNOS4412_SROMC_BASE 0X12570000

	#define DM9000_Tacs     (0x1) 
	#define DM9000_Tcos     (0x1) 
	#define DM9000_Tacc     (0x5) 
	#define DM9000_Tcoh     (0x1) 
	#define DM9000_Tah      (0xC) 
	#define DM9000_Tacp     (0x9)   
	#define DM9000_PMC      (0x1)  
	
	struct exynos_sromc {
	unsigned int bw;
	unsigned int bc[6];
	};
	
	/*
	 * s5p_config_sromc() - select the proper SROMC Bank and configure the
	 * band width control and bank control registers
	 * srom_bank    - SROM
	 * srom_bw_conf  - SMC Band witdh reg configuration value
	 * srom_bc_conf  - SMC Bank Control reg configuration value
	 */
	void exynos_config_sromc(u32 srom_bank, u32 srom_bw_conf, u32 srom_bc_conf)
	{
		unsigned int tmp;
		struct exynos_sromc *srom = (struct exynos_sromc *)(EXYNOS4412_SROMC_BASE);
	
		/* Configure SMC_BW register to handle proper SROMC bank */
		tmp = srom->bw;
		tmp&= ~(0xF << (srom_bank * 4));
		tmp |= srom_bw_conf;
		srom->bw = tmp;
	
		/* Configure SMC_BC register */
		srom->bc[srom_bank] = srom_bc_conf;
	}
	
	static void dm9000aep_pre_init(void)
	{
		unsigned int tmp;
		unsigned char smc_bank_num = 1;
		unsigned int     smc_bw_conf=0;
		unsigned int     smc_bc_conf=0;
	
		/* gpio configuration */
		writel(0x00220020, 0x11000000 + 0x120);
		writel(0x00002222, 0x11000000 + 0x140);
		/* 16 Bit bus width */
		writel(0x22222222, 0x11000000 + 0x180);
		writel(0x0000FFFF, 0x11000000 + 0x188);
		writel(0x22222222, 0x11000000 + 0x1C0);
		writel(0x0000FFFF, 0x11000000 + 0x1C8);
		writel(0x22222222, 0x11000000 + 0x1E0);
		writel(0x0000FFFF, 0x11000000 + 0x1E8);              
		smc_bw_conf &= ~(0xf<<4);
		smc_bw_conf |= (1<<7) | (1<<6) | (1<<5) | (1<<4);
		smc_bc_conf = ((DM9000_Tacs << 28)
						| (DM9000_Tcos << 24)
						| (DM9000_Tacc << 16)
						| (DM9000_Tcoh << 12)
						| (DM9000_Tah << 8)
				| (DM9000_Tacp << 4)
						 | (DM9000_PMC));						 
		exynos_config_sromc(smc_bank_num,smc_bw_conf,smc_bc_conf);
	}
	#endif

}

在include/configs/中 vi fs4412.h

设置开机自启动文件

#define CONFIG_BOOTARGS     "root=/dev/ram rw console=ttySAC2,115200 clk_ignore_unused init=/linuxr" 

#define CONFIG_BOOTCOMMAND  "tftp 41000000 uImage;tftp 42000000 exynos4412-fs4412.dtb;tftp 43000000 ramdisk.img;bootm 41000000     43000000 42000000"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打包时未添加livepusher模块

我们的项目采用的是混入开发&#xff0c;html5, 使用到了安卓离线打包&#xff0c;其中使用到了livepusher模块&#xff0c;本来没什么难事的&#xff0c;很简单的一个问题&#xff0c;但是中文的官方文档却介绍错了包名&#xff0c;一直在郁闷为啥不行&#xff0c;痛苦啊。本来…

WiFi cfg80211的kernel架构(基于Linux 3.08)

目录 1.框架 2.主要流程 2.1.malloc & init(softmac) 2.1.3 内存分配 2.2. 结构体关系 2.3.初始化顺序 2.4.beacon frame 2.4.1.接收流程 2.4.2.beacon响应流程 2.5.scan 2.6.auth and associate 2.7. rx/tx data 2.7.1.rx 2.7.2.xmit 2.8.csa 2.9.missi…

MATLAB基础篇(下)

本文为MATLAB基础篇&#xff08;上&#xff09;的后续。 二、 MATLAB基本语法 7、基本绘图方法 Ⅰ、 MATLAB绘图的一般步骤 对数轴进行采样对采样点计算相应的函数值, 得到平面(或空间)上的点的数据运用绘图命令将数据进行图形化显示 x-1:0.01:1; %对数轴进行采样ysin(1./x);…

Linux之基础git命令的使用

Linux之基础git命令的使用 提交第一步提交第二步提交第三步查看历史提交记录查看是否需要提交过滤提交时的文件 git命令的初始使用 在使用之前&#xff0c;我们先确定我们的xshell是否安装的git&#xff0c;需要输入命令 git --version 如果没有显示版本号&#xff0c;则需要进…

【操作系统】c语言--使用信号量解决生产者和消费者问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(九)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

Eclipse配置JVM启动参数

【参考】Eclipse设置jvm参数的三种方式

git、gitlab、github在windows下通用的操作笔记

前言&#xff1a;命令是在Git Bash 下输入的命令&#xff0c;GUI部分涉及到小乌龟git&#xff0c;可以自行安装&#xff0c;不同版本有差异&#xff0c;用git的新手也可以尝试 SourceTree 提供漂亮的图形化界面操作&#xff08;但是卡顿坑多&#xff0c;需三思&#xff09; 1、…

7月11入伏,进入三伏天dog days

三伏天&#xff0c;是一年中最热的日子,今年的三伏天始于7月11日。sanfu, the hottest time of the year begins on July 11th this year. 三伏&#xff0c;也称为中国的dog days,预示着一年中最热的三个阶段&#xff0c;每一阶段大约有10-20天。Sanfu, also called Chinas &qu…

基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习五重要)

操作系统任务框架 系统任务 空闲任务几乎存在于所有的嵌入式实时操作系统&#xff0c;用户无法自行关闭空闲任务。 空闲任务的作用主要是减少核心芯片的使用率&#xff0c;避免核心芯片的负载压力过大&#xff0c;保证系统的低功耗运行。 时钟节拍任务控制系统的延时函数和等待…

matlab画拟合直方图的脚本

都是一些简单的作图参数&#xff0c;可以自己按照matlab官方的指导去改style https://ww2.mathworks.cn/help/stats/histfit.html %-----------------------------------------------------------------------------------------------------------% %-----Function: Plot a h…

Proteus8.15 安装包下载及详细安装

Proteus8.15 安装包下载及详细安装 1.安装包链接&#xff0c;需要可自取&#xff0c;也可自行去官方下载最新版本 链接: https://pan.baidu.com/s/1Zcdr1hFo2RHCw88CXtY2bQ?pwdbuz6 提取码: buz6 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 –来自百度网盘超…

Redis 高可用和优化(主从复制、哨兵、集群)

目录 一&#xff1a;Redis 高可用 二&#xff1a; Redis 持久化 1、持久化的功能 2、Redis 提供两种方式进行持久化 3、 RDB 持久化 &#xff08;1&#xff09;触发条件 &#xff08;1.1&#xff09;手动触发 &#xff08;1.2&#xff09;自动触发 &#xff08;1.3&am…

[SSM]MyBatis常用技巧和参数处理

目录 八、MyBatis小技巧 8.1#{}和${} 8.2别名机制&#xff1a;typeAliases 8.3mappers ​编辑 8.4IDEA配置文件模板 8.5插入数据时获取自动生成的主键 九、MyBatis参数处理 9.1单个简单参数类型 9.2Map参数 9.3实体类参数 9.4多参数 9.5Param注解&#xff08;命名…

面向对象五大基本原则

面向对象五大基本原则 更多精彩 先案例后讲解&#xff0c;这里是代码教父&#xff0c;今天讲解面向对象的五大基本原则&#xff1a; 单一职责原则&#xff08;The Single Responsibility Principle&#xff09;开闭原则&#xff08;The Open-Closed Principle&#xff09;里氏…

javassit 01

Javassist&#xff1a; Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba &#xff08;千叶 滋&#xff09;所创建的。它已加入了开放源代码JBoss 应用服务器项目&#xff0c;通过使用Javassist对字节码操作为JB…

Java SSM 重制版(三)SpringSecurity

SpringSecurity 基于Spring6的重制版&#xff0c;截止目前&#xff0c;最新的版本是6.1.1版本。 前置课程&#xff1a;《Spring核心内容》《SpringMvc》《JavaWeb》《Java9-17新特性》 安全是开发者永远绕不开的话题&#xff0c;一个不安全的网站&#xff0c;往往存在着各种…

主机与虚拟机ubuntu网络无法ping通问题

一. 主机与虚拟机无法ping通问题 在嵌入式开发中&#xff0c;经过会涉及网络方面的问题。最常用到的是开发板在 虚拟机&#xff08;ubuntu&#xff09;通过NFS服务挂载到ubuntu中&#xff0c;这里就涉及网络是否可以ping通问题。 开发板 ping 通 ubuntu虚拟机系统的前提&…

基于matlab使用视频和深度学习进行手势识别(附源码)

一、前言 此示例首先演示如何使用预训练的SlowFast视频分类器执行手势识别&#xff0c;然后演示如何使用迁移学习在自定义手势识别数据集上训练分类器。 基于视觉的人类手势识别涉及使用一组视频帧预测手势&#xff0c;例如挥手打招呼、手语手势或鼓掌。手势识别的一个吸引人…

启动失败之源发行版 17 需要目标发行版 17

一、java: 警告: 源发行版 17 需要目标发行版 17 1.1.原因 :JDK 版本不对。 这里可以看到&#xff0c;项目需要的是JDK17&#xff0c;而我这里用的是JDK1.8。 1.2.修改 这里有两种操作&#xff0c;一种是修改项目版本&#xff0c;一种是修改JDK版本。无论是哪一种&#xff0…