- 博客(69)
- 资源 (2)
- 收藏
- 关注
原创 PRU pruss, rproc_pru和prueth uboot源码分析
首先看一下PRU_ICSSG的功能框图,对于AM64来说,包含两个PRU_ICSSG模块。每个PRU_ICSSG共包含两个slice。每个PRU core自己Local Instruction RAM, 容量不同。PRU 内核执行任何指令之前,需要由外部 PRU_ICSSG 主机处理器对其进行初始化。关于IRAM跟详细的信息,可以参考TRM除了IRAM外,还有DRAM, 需要注意的是,从 PRU0 能直接访问数据 DRAM 1 以及 PRU1 能直接访问数据 DRAM 0, Shared RAM。
2024-01-16 16:25:56
931
原创 测试AM64x PRU模块的以太网接口
SDK版本:0806开发板:AM64GPEVM自行编译U-Boot和内核,使用官方的default文件系统,并更新了root/boot下的Image和设备树文件。U-Boot使用的上一个实验编译的结果。
2023-06-28 07:56:26
308
原创 system.map文件
system.map文件记录了所有符号(函数名和变量)的运行地址,帮助我们理解内核编译。每次编译内核都会生成新的system.map文件。
2023-05-07 16:04:07
1742
1
原创 嵌入式Linux底层系统开发 +系统移植+内核文件系统(基础)
window10系统,虚拟机下安装Ubuntu,windows通过wifi上网,网口与开发板直连。虚拟机配置成双网卡模式,通过NAT上网,通过桥接模式和开发板通信。如何编译—>如何添加命令和功能—>如何定义自己的开发板。
2023-05-03 11:22:23
1315
原创 ramfs, rootfs&initramfs
ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为一个动态可调整大小的基于ram的文件系统。Linux通常将所有文件缓存在内存中。从后备存储(通常是挂载文件系统的块设备)读取的数据页被保留下来,以防再次需要,但标记为干净(可自由),以防虚拟内存系统需要内存做其他事情。类似地,写入文件的数据一旦写入后备存储,就会被标记为干净,但会保留下来用于缓存,直到VM重新分配内存。类似的机制(dentry缓存)大大加快了对目录的访问速度。
2023-04-29 20:56:29
1631
原创 IPC Notify&IPC RPMessage
低延时,但是受到一定的限制(需用户自行检查错误,将message和client ID 放入一个单独的32b,因此是不能使用指针来传值),底层实现将使用HW机制来中断接收核心,它还将使用HW fifo(可用时)或基于快速内部RAM中的SW fifo的共享内存来传输消息值。Notify意为通知,作为消息的Send方,因此是Cilent。需要在Client完成。
2023-04-28 15:23:10
248
原创 AM64X EVM 使用CCS 启动问题记录
在OSPI BOOT MODE下,开发板上电后会自动执行NULL Bootloader,在这种情况下能成功Debug非A53核上的程序。在NO BOOT模式下,使用CCS Scripting初始化SOC。在这种情况下初始化SOC,debug A53不会报错。
2023-04-28 15:21:52
272
原创 bootloaders
一般来说,bootloader是一种软件/固件,它在SoC上电后立即运行。bootloader的主要职责是启动软件的后续部分,例如操作系统、baremetal应用程序或在某些情况下另一个bootloader。当涉及到嵌入式时,bootloader通常与底层SoC体系结构密切相关。bootloader通常存储在一个受保护的、非易失性的片上存储器中。通常bootloader执行各种硬件检查,初始化处理器和配置SoC寄存器等。由于bootloader的主要目的是加载下一个软件,因此它。
2023-04-28 15:19:18
1138
原创 顶层Makefile学习记录
make xxx_defconfig 的过程make am64x_evm_r5_defconfig O=./testbuild V=1make -C /home/wzx/ti-processor-sdk-linux-am64xx-evm-08.06.00.42/board-support/u-boot-2021.01/testbuild KBUILD_SRC=/home/wzx/ti-processor-sdk-linux-am64xx-evm-08.06.00.42/board-support/u-b
2023-04-28 15:08:37
284
原创 U-Boot命令
U-Boot的本质工作是引导Linux,常用bootz、bootm和boot来启动Linux。md:用于显示内存值,注意U-Boot中的命令都是十六进制,10=>0x10 是十进制的16。mm:也用于修改指定地址内存值,修改内存值的时候地址会自增。fstype:用于查看MMC设备某个分区的文件系统格式。内存操作:md nm mm mw cp cmp。fatload:将指定的文件读取到DRAM中。mw:用于使用一个指定的数据填充一段内存。cmp:比较两个内存的数据是否相等。nm:用于修改指定地址的内存值。
2023-04-28 14:56:52
679
原创 Step Port U-Boot(AM64x)
TI AM64x soc通常由通过I2C接口连接的外部电源管理IC (PMIC)提供。PMIC在满足数据表要求的电压下为SoC供电。一般情况下,最小设备树应包含串口、直接参与引导过程的外设(如GPMC、DDR、MMC、SPI等)和用于PMIC连接的I2C模块。
2023-04-24 20:44:00
392
原创 How to use CCS to debug a running M4F core that was started by Linux?
在CCS中构建remote core project(ipc_rpmsg_echo_linux_am64x-evm_m4fss0-0_freertos_ti-arm-clang)启动AM64 Target Configuration. Connect to the core BLAZAR_Cortex_M4F_0, Load Symbols。接下来在CCS端进行Debug,选择hello_world_am64x-evm_m4fss0-0_nortos_ti-arm-clang例程。
2023-04-12 21:38:29
509
原创 Memory Map
主要介绍AM64x的MSRAM和DDR的内存分布:MSRAM:总共2MB,被分成8个banks,每个256KB。首先了解一下,两种Domain:微控制器单元域(MCU域)是一个“chip-in-a-chip”的概念,它使用操作。这使得MCU域可以,而,包括设备其余部分处于复位或下电状态的时间。MCU Island集成了通信外设,如SPI, I2C和UART,这些外设预计用于安全关键通信,因此如果主SoC出现故障,MCU Island可以将此信息通信到系统的其余部分。
2023-04-07 10:34:43
513
原创 GDB远程调试
Host端GDB加载需要调试的程序,注意 -g参数。Host 进入GDB程序,启动远程连接到开发板。在开发板上启动gdbserver。
2023-02-25 11:24:59
207
原创 Sitara™处理器的产品开发路线图
一般情况下,会存在四个主要的发展阶段,其中TI EVM为我们提供了良好的软硬件基础,可以在不同的阶段进行参考和验证。
2023-02-15 21:38:43
371
原创 IPC for AM64x
AM64x处理器有两个双核Cortex-R5F子系统(R5FSS)和一个Cortex-M4F子系统,此外还有一个双核Cortex-A53子系统。正常情况下,引导加载程序(U-Boot/SPL)引导A53并使用HLOS(Linux/Android)加载。然后A53引导R5和M4F核心。本文适用于在Cortex A53内核上运行Linux的AM64x用户。目标是帮助用户了解如何与R5F和M4F核心建立通信。这个任务有很多方面:构建、加载、调试、内存共享等。本文打算采取循序渐进的步骤来理解所有这些部分。
2022-12-01 20:58:58
609
原创 System Firmware
系统固件是一个集合术语,用于描述TI基础安全(TIFS)和资源管理(RM)/电源管理(PM)服务。系统固件在AM64x上的安全管理器和设备管理器核心(DMSC)上执行。
2022-11-29 12:38:17
1883
原创 GP to HS-FS Migration Guide(TI AM64 GP EVM)
GP to HS-FS Migration Guide(TI AM64 GP EVM)
2022-11-26 20:50:27
154
原创 DDRSS ECC(含bw_mem test ,ecc_enable and ecc_disable)
DDR subsystem(DDRSS)是由DDR controller、DDR PHY 和wrapper logic构成。为了保证SDRAM数据的完整性,DDRSS桥支持对写入或从SDRAM读取的数据进行内联ECC。ECC对所有在ECC保护地址范围内的访问进行计算。1位错误可通过ECC纠正,2位错误不可纠正,将被软件视为不可恢复错误并触发异常。
2022-11-25 21:29:15
767
原创 python文件字符串操作
使用多个分隔符分割字符串import re a='Beautiful,is;better*than\nugly' re.split(';|,|\*|\n',a)按行读取文件,如何去掉换行符"\n"for line in file.readlines(): line=line.strip('\n')
2021-12-01 10:37:34
94
原创 学习记录-Linux图形栈:基于DRM和Wayland
基本概念1.Wayland:显示服务器,是一种协议2.Weston:是Wayland协议的的实现3.drm又包括:drm framebuffer: 它是一块内存区域,我把它理解为一块画布,驱动和应用层都能访问它plane: 图层crtc: 读取当前扫描缓冲区的像素数据,生成视频模式定时信号.它对内连接 Framebuffer 地址, 对外连接 Encoder。它会扫描你画布(Framebuffer)上的内容,叠加上 Planes 的内容,传给 Encoder。encoder: 将内存
2021-11-21 21:38:16
1411
原创 学习记录-std::shared_ptr
概述std::shared_ptr<T>提供一种多个栈对象协作管理同一个堆对象的机制。以便在堆对象没有被引用的情况下将其free。std::shared_ptr<T>的重要字段:_Ty *_Ptr; //被管理的动态内存指针_Ref_count_base *_Rep; //计数器基类指针,用于指示有几个shared_ptr共享_Ptr指向的对象shared_ptr是一种智能指针(smart pointer),作用有如同指
2021-11-21 21:37:41
941
原创 调试记录-<command-line>: error: unable to find numeric literal operator ‘operator““x‘
/home/jing/wzx/XRT/src/runtime_src/ert/scheduler/scheduler.cpp: In function 'bool ert::cu_stat(ert::size_type)':<command-line>: error: unable to find numeric literal operator 'operator""x'/home/jing/wzx/XRT/src/runtime_src/ert/scheduler/scheduler.c
2021-11-18 11:10:06
513
原创 学习记录-Linux内核模块查看命令
概述内核模块是Linux提供的一种机制,允许在内核运行时动态加载进内核中,具有两个特点:内核模块本身不编译入内核映像,有效控制缩减内核镜像的大小内核模块一旦被加载,就和内核中的其他部分完全一样内核模块的作用:设备驱动是以独立的modules的形式存在的,设计的驱动需要包含在Module内部。Module编译完成后,会生成ko文件,可安装可卸载。ldd:显示应用程序(二进制程序)所依赖的库文件ldd /bin/lsxilinx 开发版显示:root@xilinx-zcu104-20
2021-11-15 15:21:22
1315
原创 学习总结-编写自己的CMakeLists.txt
cmake_minimum_required(VERSION 3.3)get_filename_component(COMPONENT_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)project(${COMPONENT_NAME})find_package(OpenCV COMPONENTS opencv_core opencv_video opencv_videoio opencv_imgproc opencv_imgcodecs opencv_highgui)i
2021-11-14 19:48:06
2694
原创 学习记录-class与namespace的区别
在C++中,structure和class几乎是完全相同的,区别在于structure默认是public,而class默认是privatenamespace则与上面两种完全不同,namespace仅仅是一块有名字的逻辑区域,其内部有变量和函数等namespacenamepace的作用是避免程序中的命名冲突,传统的C++程序是只有一个namespace,现在的程序越来越复杂,为了防止程序员在合并不同程序时出现函数、类、结构体等命名的重复,所以用到命名空间。名字空间包含类、函数、常量和模板声明等名字空间
2021-11-14 11:42:54
1256
原创 学习记录-static,inline修饰函数的作用
staticstatic修饰的函数叫静态函数,根据其出现的地方可以分为以下两类:1.静态成员函数:出现在类内,作用是调用这个函数不会访问或者修改任何对象数据成员2.全局静态函数:用static修饰的函数,限定在本源码文件中,不能被本源码文件以外的代码文件调用因此定义静态函数有以下好处:其他文件中可以定义相同名字的函数,不会发生冲突。静态函数不能被其他文件所用inline内联函数,即在线函数或编译时期展开函数。程序中使用inline关键字修饰的函数,编译阶段时在函数的调用点把inlin
2021-11-14 11:20:34
676
原创 学习记录-交叉编译环境的设置
# Check for LD_LIBRARY_PATH being set, which can break SDK and generally is a bad practice# http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html#AEN80# http://xahlee.info/UnixResource_dir/_/ldpath.html# Only disable this check if you are ab
2021-11-10 22:31:12
1592
原创 学习记录-CmakeLists.txt
## Copyright 2020 Xilinx Inc.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2
2021-11-10 22:30:54
2798
二进制文件查看的利器
2020-12-01
卷积神经网络资料,供学习参考
2020-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人