1.Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器
2.P4 学习笔记(六)- 实战网络层,配源自定义拓扑结构
3.druid源码学习笔记9_testOnBorrow&testOnReturn&testWhileIdl
4.UE4学习笔记 使用插件添加一个ShadingModel
5.学习笔记:搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
6.电力行业,码笔米尔STM32MP135开发板IEC61850协议移植笔记
Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器
在编译Ubuntu驱动时,记何由于使用的创建gcc版本为7.3.0,通过apt管理和下载都无法直接安装,开源因此需要从源码编译安装gcc7.3.0编译器。笔记点阵生成工具源码
GCC,源码作为GNU项目的配源重要组成部分,是码笔一款遵循GPL许可证的自由软件。起初,记何它为GNU操作系统设计,创建如今已广泛应用于Linux、开源BSD、笔记MacOS X等系统,源码甚至在Windows上也有应用。配源GCC支持多种处理器架构,如x、ARM和MIPS,并且支持多种编程语言,如C、C++、Fortran、Pascal等。
要从源码安装gcc7.3.0,首先需要下载源码包。下载地址为:mirrors.tuna.tsinghua.edu.cn...
安装过程分为几个步骤。首先,确保网络连接,因为需要依赖库,如libgmp-dev、libmpfr-dev和libmpc-dev。安装完这些后,不要卸载已有的北斗源码gcc,因为可能会遇到问题。
下载并解压gcc-7.3.0.tar.gz,然后执行./configure。注意增加c和c++的配置,避免编译结果只有g++。配置完成后,进行make -j4编译,可能会遇到错误,如"fatal error: asm/errno.h: No such file or directory",这时需要修改头文件路径。
继续编译,可能会遇到"sanitizer_syscall_generic.inc::: error: '__NR_open' was not declared in this scope",解决方法是修正头文件链接。最后,编译成功后执行sudo make install,并确认安装版本。
在安装过程中,有两点需要注意:一是本地需要g++,否则编译时会出错,解决方法是安装gcc;二是安装后可能只有g++,没有gcc,此时需在./configure阶段添加c和c++的配置。
P4 学习笔记(六)- 实战网络层,自定义拓扑结构
本文使用 Zhihu On VSCode 创作并发布
在 P4 学习笔记系列中,前文已实践链路层 Learning Switch,了解了与 control plane 的 clone 和 digest 通信。本文将深入网络层,自定义网络拓扑结构,进行路由配置。新知识包括自定义拓扑结构和网络层路由配置。
自定义网络拓扑结构方面,使用 P4app.json 的osgi 源码 topology 部分来定义,可实现更自由的配置,如经典的 pod 结构。需注意 link 添加顺序,以确保正确定义 switch 端口。每个 host 配置默认 gateway、IP 地址及链路层 MAC 地址,运行后可呈现预设拓扑。
接着是 P4 源码编写,加入 IP 头部,实现网络层操作。源码复杂度不高,却复习了 P4 每个环节,强化了网络知识。
配置控制平面时,利用上次练习的 p4utils,可设置每个 switch 的路由表,即 ipv4_lpm。至此,环境准备就绪,开始测试。
通过 mininet 的 CLI 测试 ping,若成功,表明配置无误。如遇到问题,可从日志文件、pcap 文件及 SimpleSwitchAPI debug。pcap 文件显示 ping 过程,用于分析路由规则。日志文件检查 packet 处理情况。连接 SimpleSwitchAPI 确认表填充状态。
掌握上述测试方法,后续定义复杂拓扑结构时,印章 源码能有效解决问题。本文旨在教会读者自定义网络拓扑结构,并在 P4 环境下进行路由配置,构建小型数据中心。
druid源码学习笔记9_testOnBorrow&testOnReturn&testWhileIdl
druid源码中,关于testOnBorrow、testWhileIdle和testOnReturn的属性配置值得重点关注。在1.2.9版本后,这些属性的默认值与早期wiki中的记录有所不同。testOnBorrow的默认值从true变为false,而testWhileIdle的默认值则从false变为true。这表明代码在年后可能进行了更新,但wiki尚未同步更新。 testOnBorrow主要在getConnectionDirect方法中起作用,当设置为true时,获取连接后会执行validationQuery检查连接是否可用。如果连接不可用,将重新获取。而testWhileIdle则在连接空闲时间达到timeBetweenEvictionRunsMillis时执行验证,同样用于检查连接状态。 testWhileIdle与testOnBorrow互斥,如果两者都为true,仅执行testOnBorrow。计算空闲时间的规则涉及checkExecuteTime、lastKeepTimeMillis和当前时间的比较。 testOnReturn属性在DruidPooledConnection#close()方法,即归还连接时被调用。当设置为true时,回收连接后会检查其状态,如连接未关闭,会执行validationQuery。如果连接不可用,漱源码会关闭并计数,否则继续归还操作。 总结如下:testOnReturn在连接归还时检查,默认为false。
testOnBorrow和testWhileIdle在连接借用时检查,早期testOnBorrow为true,testWhileIdle为false,但新版本可能出于性能考虑进行了调整。
UE4学习笔记 使用插件添加一个ShadingModel
此文章借鉴了以下三篇文章,在此对分享者表示感谢。
1. [UE4]插件添加ShadingModel
2. Ue4 使用MaterialCustomOutput自定义ShadingModel
3. UE4(虚幻)学习笔记--虚幻4.自定义shadermodel
在学习UE4渲染管线过程中,发现添加ShadingModel时,通常需要修改源码版引擎的源码。本文介绍一种无需修改引擎源码的方式,添加自定义ShadingModel,并定制延迟渲染的光照计算。
第一篇文章已详细介绍了修改思路,本文重点记录插件创建与添加模块的步骤。
以4..2版本为例,首先新建一个插件,模板选择Blank。新建完成后,打开plugins所在位置,进入source文件夹。
将ToonShader文件夹复制一份,改名为ToonShaderBootstarp,并将ToonShaderBootstarp文件夹中的ToonShader全部改成ToonShaderBootstarp(包括文件名与其中变量名)。
注意:在ToonShaderBootstrap.Build.cs文件中,需要在PrivateDependencyModuleNames.AddRange中加入"Projects","DeveloperSettings",否则在之后的修改和编译中会产生错误。
之后在插件根目录中的ToonShader.uplugin中添加该模块,然后重新生成sln,该模块就添加完成了。
编译成功后,将ToonShader.uplugin中ToonShaderBootstarp模块的Type改为"UncookedOnly",LoadingPhase改为"EarliestPossible",否则会报关联不上插件源码的错误。
编译成功后,进入引擎,新建C++ Class,选择MaterialExpressionCustomOutput类,再新建一个Class,选择developerSettings类。
接下来修改ToonShaderOutput.h与ToonShaderOutput.cpp,编译通过后,继续修改ToonShaderBootstarp.cpp。
修改ToonShaderBootstrapSettings.h,增加插件的启动和关闭参数,然后修改配置文件的方法和正常修改源码添加ShadingModel的方法相似。
插件成功加载后,可以在Material里面看见ToonShader节点。
自定义ShadingModel添加完成。
总结:
1. ToonShader模块实现了UMaterialExpressionCustomOutput的子类,为运行时模块。
2. ToonShaderBootstrap模块在引擎启动Shader编译前加载,用以向虚幻引擎Shader文件夹中替换默认Shader文件。
ShadersOverride文件夹下存放了shader文件,Default文件用来恢复,Override用来做替换,新增的Shader文件都需要存放在Toon目录下。
本文记录了在UE4中踩的坑,希望对大家有所帮助。
学习笔记:搭建 Linux 内核网络调试环境(vscode + gdb + qemu)
本文主要介绍了如何搭建Linux内核网络调试环境,主要步骤包括: 首先,使用VM(虚拟机)和Ubuntu .,配置dhcp方式的网络,绑定主机网卡,确保获得有效IP地址和DNS配置。 接着,安装和配置内核源码、gdb,进行内核的编译,并测试gdb是否能正确调试内核。 然后,使用qemu模拟器进行测试,特别提到一个关键问题:qemu的bzImage与gdb的vmlinux如何匹配。实际调试中,你需要确保gdb服务器与qemu的vmlinux关联正确。 对于非图形化的gdb,可以借助VSCode进行更便捷的调试。配置步骤包括设置远程连接Ubuntu、内核源码查阅和开启调试功能。 在VSCode中,创建Linux配置,安装相关插件后,可通过“运行”->“添加配置”启动调试。 在调试过程中,qemu需启用调试模式,通过输入's',VSCode可以捕获断点并进行深入调试。 为了实现外网通信,需要在VM中设置网桥,将qemu接口连接到网络。 测试阶段,可以将监听地址从.0.0.1调整为VM所在网段的地址,便于telnet测试。电力行业,米尔STMMP开发板IEC协议移植笔记
IEC协议在电力和储能系统中的应用广泛,该协议实现智能变电站工程运作的标准化,使实施规范、统一和透明。本文介绍如何在基于米尔MYD-YFX开发板的Linux系统上移植和使用libIEC开源库,提供IEC/MMS,IEC/GOOSE和IEC-9-2/采样值通信协议的服务器和客户端库。
为了编译IEC库,首先需要安装JAVA环境。使用米尔提供的JDK安装包(jdk-8u-linux-x.tar.gz)并解压到工作目录,随后配置环境变量以确保Java运行环境成功安装。验证安装过程通过运行java -version命令。
紧接着,配置交叉编译工具链,使用MYIR制作的交叉编译工具链,将工具链文件复制到工作目录,并设置环境变量,确保编译过程顺利进行。验证设置成功使用arm-myir-linux-gnueabihf-gcc -v命令。
IEC库的编译通过源码包实现。从光盘文件的/-Linux_Source/IEC目录获取libiec-1.3.0.tar.gz,解压并进入目录,执行make TARGET=LINUX-ARM命令编译库。
编译完成后,MYIR IEC应用位于目录examples/myir_iec_server下。将myir_iec_server拷贝至开发板,运行应用并验证其正确性。启动dbus-launch,设置环境变量,执行./myir_iec_server命令,确保通讯成功。
为了验证应用,可使用IEDScout软件。在IEC应用界面打开软件,输入开发板网口的IP地址,点击Discover按钮,然后在Browser页面看到MYIR1命名的IED设备模型。点击进入通用I/O控制界面,双击GGIO1下面的LED1数据对象,点击Write按钮对LED1进行控制,修改Value栏为false,点击Write按键,此时开发板上的LED心跳灯被点亮,说明通讯成功。
米尔MYD-YFX开发板基于STMMP单核Cortex-A7处理器,提供丰富的接口和资源,助力开发者快速开发智能变电站相关应用。
更多关于MYD-YFX开发板的信息可访问产品链接。
UE4学习笔记(1):UE源码下载编译+安卓打包
注:该笔记以UE4..2在windows平台为例,vs版本为
1.关联github和Epic账户
要在github上获取UE4源码需要先关联账户,否则找不到源码,网页
按照官网提供流程即可完成 GitHub上的虚幻引擎 - Unreal Engine
记得确认邮件,否则还是(当初就是忘记了,卡了好一会儿)
2.下载UE4源码
在 Releases · EpicGames/UnrealEngine (github.com)中选择自己需要的版本(我使用的是4..2),这步很简单,但需要注意的是还需要将Commit.gitdeps.xml文件也一并下载,用于替换同名文件(有些版本则没有这样的文件),不替换的话后续会报错(之后步骤中会提到)
解压后目录如下:
3.执行bat文件
(1)点击运行setup.bat,没有替换Commit.gitdeps.xml文件可能会出现如下问题:
(2)点击运行GenerateProjectFiles.bat,此过程可能会出现如下问题:
未找到框架 .NETFramework Version=v4.6.2
只需要在VS Installer中选中安装就行:
完成后会生成UE4.sln文件
4.生成
VS打开UE4.sln,开始生成:
但是生成过程中我出现了这样的问题:
UE4 fatal error C: 编译器限制: 达到内部堆限制
error C: 超过了 PCH 的虚拟内存范围问题解决
我出现这样问题的原因是我的C盘空间不够大(分区的时候给的比较少),托管系统设置在C盘,导致无法分配足够的虚拟内存,设置为空间足够的盘即可。
步骤:电脑->属性->高级系统设置->高级->性能设置->高级->更改
OK,成功编译完成
5.安卓打包
该过程有官方文档,并且比较繁琐,直接给出链接:
设置虚幻的Android SDK和NDK | 虚幻引擎文档 (unrealengine.com)
UE部署到Android以及杂症的解决 - 知乎 (zhihu.com)
我就提一下自己遇到的问题,在UE4中进行安卓打包的时候遇到了这样的问题:
原因在于SetupAndroid.bat中,SDK Platform的版本选择是,而在UE项目设置->平台 - Android SDK中的SDK API Levle默认选择latest。但是我安装AS的时候默认给我安装了最新的Android API (此时latest指向的是版本),导致冲突。解决方法是UE项目设置中手动设置指定版本,或者在AS中卸载高于版本的Android API。
OK,打包成功!!!
6.打开游戏
但是,是的,还有但是(都最后一步了,还有问题OVO!!!),在手机上下载安装,打开后是这样的:
原来是因为打包除了生成apk文件还生成了obb,至于Google Play Store Key应该就是一个密钥了。
解决方法是在UE项目设置->Android中勾选“将游戏数据打包至.apk中”,我们可以看到对这个勾选项的解释:
行,勾选后重新打包,成功运行: