ZYNQ Linux+裸核

一、工程目标

  • CPU0运行Linux系统
  • CPU1裸核运行,控制GPIO7连接的LED灯闪烁。
  • Linux系统运行在内存的前512MB空间内。
  • 裸核运行于内存的后512MB空间内。

二、Linux系统设置

1.由hdf文件生成设备树文件后,将system-top.dts文件中根节点目录下的memory节点的reg属性由<0x0 0x40000000>改为<0x0 0x20000000>。表示Linux系统运行于内存中偏移量0,长度为0x20000000的空间内,如下图所示:
在这里插入图片描述

2.在bootargs中添加maxcpus=1,表示使用单核。

三、SDK设置

1.CPU1设置

1.在SDK中新建CPU1工程,如下图所示:
在这里插入图片描述

2.在lscript.ld文件中将CPU1的内存空间设为偏移量0x20000000,长度为0x20000000,如下图所示:
在这里插入图片描述
3.在CPU1的工程中输入以下程序,控制GPIO7连接的LED闪烁。

#include "xparameters.h"
#include "xgpiops.h"
#include "sleep.h"

int main(void)
{
	int status;
	XGpioPs GpioPs;
	XGpioPs_Config* GpioPs_Config;

	GpioPs_Config = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
	if(GpioPs_Config == NULL)
	{
		return XST_FAILURE;
	}

	status = XGpioPs_CfgInitialize(&GpioPs,GpioPs_Config,GpioPs_Config->BaseAddr);
	if(status != XST_SUCCESS)
	{
		return XST_FAILURE;
	}

	XGpioPs_SetDirectionPin(&GpioPs,7,1);
	XGpioPs_SetOutputEnablePin(&GpioPs, 7,1);
	while(1)
	{
		XGpioPs_WritePin(&GpioPs, 7, 1);//点亮MIO的第7位输出1
		usleep(500000);//延时
		XGpioPs_WritePin(&GpioPs, 7, 0);//熄灭MIO的第7位输出0
		usleep(500000);//延时
	}
	return 0;
}

2.FSBL设置

1.新建FSBL工程如下图所示:
在这里插入图片描述

2.在main函数的HandoffAddress = LoadBootImage()程序后添加如下程序用来启动CPU1:

Xil_Out32(0xfffffff0, 0x20000000);
dmb (); //等待内存写入完成(同步)
#define sev() __asm__("sev")
sev (); //通过"SEV"指令唤醒CPU1并跳转至相应的程序

其中0x20000000便是上一步设置的CPU1内存空间起始地址。

3.生成BOOT.BIN

1.将编译生成的u-boot.elf复制到Windows系统下,使用SDK提供的Create Boot Image生成BOOT.BIN。
2.依次添加FSBL.elf,design_1_wrapper.bit,u-boot.elf,CPU1.elf打包生成BOOT.BIN文件。

四、运行测试

1.Linux系统测试

将生成的BOOT.BIN文件复制到SD卡,启动开发板,输入以下命令查看Linux系统使用的CPU核数与内存大小:

cat /proc/cpuinfo
cat /proc/iomem

命令执行结果如下:
在这里插入图片描述
可以看到Linux使用了一个CPU,RAM的范围为从0x00000000到0x1FFFFFFF,与上面设置一致,作为对比,下图为使用双核CPU时Linux系统信息:
在这里插入图片描述
在这里插入图片描述

2.裸核测试

在系统加载完BOOT.BIN文件后,可以看到GPIO7所控制的LED灯在闪烁,说明裸核运行正常。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Linux系统裸核的结合可以实现多核处理器的并行计算和资源利用。在这种配置下,Linux系统运行在内存的前512MB空间内,而裸核运行于内存的后512MB空间内\[1\]。为了实现这种配置,需要进行以下步骤: 1. 首先,需要开发裸机程序,并测试通过。这些程序需要根据需求进行开发,并确保各个CPU内存的位置配置正确\[2\]。 2. 在裸机端,需要将除运行Linux系统的CPU之外的其他核心都运行起来,并进行测试以确保正常运行。可以参考官方AMP手册或者其他相关教程进行配置\[2\]。 3. 在Linux系统中,可以使用命令来查看系统的配置情况。例如,可以使用命令来查看Linux使用的CPU数量以及RAM的范围。对于单核CPU的情况,RAM范围通常为从0x00000000到0x1FFFFFFF\[3\]。 综上所述,Linux裸核的结合可以实现多核处理器的并行计算和资源利用。通过正确配置和测试裸机程序,可以实现Linux系统裸核的协同工作。 #### 引用[.reference_title] - *1* *3* [ZYNQ Linux+裸核](https://blog.csdn.net/qq_17785775/article/details/122607758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [zynqmp Linux + 裸机 (A53-0 Linux,A53-1 2 3 裸机大数据量实时处理,R5-0 协议处理,R5-1 屏幕显示逻辑...](https://blog.csdn.net/Nyiragongo/article/details/126740681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值