linux 设备树的操作与常识
内容概要:本文详细介绍了设备树(Device Tree)的概念及其在i.MX6ULL平台上的应用,包括设备树的基本结构、节点组织方式、属性定义和使用方法。设备树是一种描述硬件设备的数据结构,它通过DTS(Device Tree Source)文件定义,并在系统启动时被解析为DTB(Device Tree Blob)。文中解释了根节点、子节点、compatible属性、reg属性等关键元素的作用,以及如何通过设备树配置CPU、GPIO、I2C等外设。特别强调了pinctrl子系统的功能,即通过设置引脚复用和电气属性来配置外设引脚。此外,还介绍了设备树在内核启动过程中的角色,包括如何通过compatible属性匹配内核支持的设备,并通过chosen节点传递启动参数。
适合人群:具备一定嵌入式系统开发经验,尤其是对ARM架构和Linux内核有一定了解的研发人员。
使用场景及目标:①理解设备树的工作原理及其在嵌入式系统中的重要性;②掌握如何编写和修改设备树文件以适配特定硬件平台;③学习如何通过设备树配置外设,如GPIO、I2C等;④了解设备树在内核启动过程中的作用,确保正确加载和初始化硬件设备。
其他说明:设备树不仅简化了硬件抽象层的设计,还使得同一内核能够支持多种硬件平台。开发者可以通过查阅Linux内核源码中的绑定文档(位于`Documentation/devicetree/bindings`目录下)来获取更多关于特定设备的配置信息。此外,文中还提到了一些常用的调试工具和命令,如`devmem2`指令用于查看寄存器内容,以及通过`/sys/class/gpio`接口控制GPIO引脚。
网络编程与开发 多线程服务器开发
内容概要:本文详细介绍了简易TCP服务端与客户端的构建及升级过程。首先讲解了基本的TCP通信流程,包括建立socket、绑定端口、监听、接受连接、收发数据和关闭socket等步骤。接着探讨了不同消息传输方式(纯字符串、结构化二进制数据)的特点和应用场景。然后重点讲述了服务端从单客户端阻塞模式逐步升级到支持多客户端的方式,包括select模型下的单线程多客户端处理、多进程多端口、多线程单端口以及多进程多线程的组合模式,分析了各自的优缺点。最后引入了生产者消费者模式,解释了其在多线程环境中处理并发连接时的作用,确保了数据处理的高效性和稳定性。
适合人群:有一定网络编程基础,希望深入了解TCP通信机制和多线程编程技术的开发者或学生。
使用场景及目标:①理解TCP通信的基本原理和步骤;②掌握多种消息传输方式及其适用场景;③学习并实践服务端从简单到复杂的多客户端处理方式;④掌握生产者消费者模式在多线程环境下的应用,提高并发处理能力。
阅读建议:本文内容较为深入,建议读者结合实际编程环境进行实验,特别是对于多线程和多进程部分,应尝试编写代码来加深理解。同时,关注不同模式下性能和稳定性的差异,思考如何在实际项目中选择合适的技术方案。
libev的使用与学习笔记
内容概要:本文档主要记录了libev的安装步骤以及遇到的权限问题解决方案,还介绍了libev编译时的调试配置方法。文档首先详细描述了libev的安装命令流程(configure、make、make install),并针对make install过程中出现的“Permission denied”错误进行了分析,指出这是由于普通用户对/usr/local目录缺乏写入权限导致,并给出了解决方案——切换至具有相应权限的系统用户进行安装。此外,文档提及了在编译libev时可以通过指定CFLAGS=-g3参数来配置,以便更好地调试宏定义。最后,简要解释了C语言中逗号表达式的概念及其在宏定义中的应用,包括逗号表达式的求值规则和优先级等特性。;
适合人群:对libev库感兴趣或需要使用该库进行开发的技术人员,尤其是遇到安装问题或希望深入了解其内部机制的开发者。;
使用场景及目标:①帮助用户顺利完成libev库的安装,特别是解决安装过程中可能遇到的权限问题;②为开发者提供有效的调试手段,如通过设置特定编译参数展开宏定义,便于跟踪和理解libev源码;③介绍C语言中逗号表达式的使用场景和特点,加深对宏定义的理解。;
阅读建议:读者应重点关注安装过程中出现的具体错误信息及解决办法,同时对于C语言中较为复杂的逗号表达式,可以结合实际例子进行练习,以加深理解和记忆。
autotools使用说明.rar
autotools使用说明文档、配套的hello源码操作指南。
linux 下c/c++使用autotools工具自动生成makefile 操作说明。
指令:autoscan、aclocal、autoheader、autoconf、automake
创建:makefile.am等
linux下glog日志库(交叉) 编译并使用.rar
linux下c++使用glog日志库,包含日志库的编译、交叉编译版本
一、编译linux版本
1. cp glog-master.tar /opt/
2. cd /opt/
3. tar -xvf glog-master.tar
4. cd glog-master
5. mkdir build
6. ./configure --prefix=/opt/glog/glog-master/build/
7. make
8. make install
二、编译arm版本
1. cp glog-master.tar /opt/
2. cd /opt/
3. tar -xvf glog-master.tar
4. cd glog-master
5. mkdir arm_build
6. ./configure --prefix=/opt/glog/glog-master/arm_build/ --host=arm-linux CC=${编译器绝对路径}/arm-linux-gcc CXX=${编译器绝对路径}/arm-linux-g++
7. make
8. make install
linux下读写INI配置文件库
开发linux程序经常要用到读写配置文件,前段时间开发需要,折腾了好一段时间。这里特做了总结。希望能帮到各位开发中的朋友。
1.linux下INI配置文件读写操作库
========================================================================
if(false)
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER "/home/swapp/arm/5.4.0/bin/arm-linux-gcc")
set(CMAKE_CXX_COMPILER "/home/swapp/arm/5.4.0/bin/arm-linux-g++")
else()
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/g++")
endif()
========================================================================
编译linux:
修改CMakeLists.txt里上面代码,使用/usr/bin/gcc编译
1. mkdir linux_build
2. cd linux_build
3. cmake ..
4. make
编译arm:
修改CMakeLists.txt里上面代码,使用arm-linux-gcc编译,这里选择您arm编译器的绝对路径
1. mkdir arm_build
2. cd arm_build
3. cmake ..
4. make
openssl-1.1.1g编译、交叉编译方式.rar
linux下编译/交叉编译openssl-1.1.1g生成动态库和静态库方法:
一、编译linux版本
1. cp openssl-1.1.1g.tar.gz /opt/
2. tar -zxvf openssl-1.1.1g.tar.gz
3. mkdir build
4. ./config --prefix=/opt/openssl-1.1.1g/linux_build
5. make
6. make install
二、编译arm版本
1. cp openssl-1.1.1g.tar.gz /opt/
2. tar -zxvf openssl-1.1.1g.tar.gz
3. mkdir arm_build
4. ./config no-asm -shared --prefix=/opt/openssl-1.1.1g/arm_build/ CC=${绝对路径名}/arm-linux-gcc CXX=${绝对路径名}/arm-linux-g++
5. make
6. 如果遇到 "-m64" 错误,vim进入Makefile,找到"-m64"并删除;重新执行make
7. make install
编译器版本说明:
gcc (GCC) 8.3.1 20190507 (Red Hat 8.3.1-4)
arm-linux-gcc (Buildroot 2016.11) 5.4.0
编译完的库存放位置:
linux版本: linux_build目录下
arm版本: arm_build目录下
linux下java调用c++库 rsa加解密.rar
包含两个文件:1.c++基于openssl实现的rsa加解密动态库 2.java调用该动态库实现加解密方法
linux下C++实现插件功能
编码工具:Qt5.8
实现功能:linux下实现插件库实现(调用动态so库)
实用的加密工具
实用的加密工具,支持Des, Mac, Aes, Rsa, Crt, Sm2, Sm3,Sm4等
SQLiteSpy Windows打开数据库工具
Windows平台上方便快捷的打开数据库工具,mysql sqlite等
Qt实现的时钟
Linux 下使用Qt c++实现的时钟代码,包含源码和可执行程序。