<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_42989787的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_42989787</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_42989787]]></copyright><item><title><![CDATA[Linux互斥锁]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121255702</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121255702</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 20:12:21 +0800</pubDate><description><![CDATA[Linux互斥锁信号量与互斥锁的比较信号量互斥锁自旋锁与互斥锁的比较自旋锁互斥锁互斥锁相关API定义互斥锁初始化互斥锁互斥锁加锁尝试获取互斥锁互斥锁解锁
信号量与互斥锁的比较
是同步还是独占？
信号量

强调信号机制(同步)
生产者–消费者模型
获取信号量失败，触发上下文调度

互斥锁


强调互斥机制


独占共享资源


获取互斥锁失败，触发上下文调度


总结

服务于多个线程间的执行的逻辑顺序的选信号量
服务于共享资源的选互斥锁

自旋锁与互斥锁的比较
是休眠还是“忙等待”？
自旋锁

加锁成本低，]]></description><category></category></item><item><title><![CDATA[Linux信号量]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121255405</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121255405</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 19:55:26 +0800</pubDate><description><![CDATA[Linux信号量信号量本质信号量特点信号量相关API定义信号量初始化信号量获取信号量尝试获取信号量释放信号量
信号量本质
计数器，用来控制对公共资源的访问
信号量特点

长时期的资源占用
获取信号量失败，触发上下文调度
当前进程(线程)陷入休眠，系统开销大

信号量相关API
定义信号量
struct semaphore sem;

初始化信号量
static inline void sema_init(struct semaphore *sem, int val)

参数：

sem：指定要初始化的信号量]]></description><category></category></item><item><title><![CDATA[Linux自旋锁]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121254585</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121254585</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 19:17:08 +0800</pubDate><description><![CDATA[Linux自旋锁原子操作自旋锁存在问题解决方案CAS 函数PAUSE 指令自旋锁原理自旋锁相关API定义自旋锁初始化自旋锁获取自旋锁函数尝试获取自旋锁函数释放自旋锁
原子操作

简单易用
只能作计数操作，保护的东西太少

自旋锁
主要用于多核处理器


短时期的轻量级加锁


加锁失败时，原地打转、忙等待


避免上下文调度、系统开销较小


加锁步骤：

查看锁的状态，如果锁是空闲的
将锁设置为当前线程持有

存在问题
在没有 CAS 函数前，多个线程同时执行这 2 个步骤是会出错的。
解决方案
CAS ]]></description><category></category></item><item><title><![CDATA[硬件原子操作]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121251492</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121251492</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 16:45:52 +0800</pubDate><description><![CDATA[硬件原子操作并发的根源并发对程序的不良影响硬件同步原语案例原子整型操作接口原子整型变量ATOMIC_INIT()atomic_set()atomic_read()atomic_add()/atomic_sub()atomic_inc()/atomic_dec()位原子操作函数set_bit()clear_bit()change_bit()
并发的根源

多线程、多进程调度
各种中断

并发对程序的不良影响

篡改共享数据
动作不完整
同步、死锁、数据竞争、系统调度开销…

硬件同步原语
由计算机硬件提供的一]]></description><category></category></item><item><title><![CDATA[解析设备树(DTS)获取属性信息]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121250343</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121250343</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 16:10:10 +0800</pubDate><description><![CDATA[解析DTS获取属性信息前言节点表示查节点of_find_node_by_name()函数of_find_compatible_node()函数查节点的属性值of_find_property()函数of_property_read_u32()函数of_property_read_u32_array()函数of_property_read_string()函数
前言

查属性所在的节点
查节点的属性值

节点表示
/include/linux/of.h
struct device_node {
    cons]]></description><category></category></item><item><title><![CDATA[Linux下构建一个deb软件安装包]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121249658</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121249658</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 15:43:39 +0800</pubDate><description><![CDATA[Linux下构建一个deb软件安装包了解Linux软件包的组成deb包概念rpm包概念dpkg工具概念常用命令deb包文件结构分析构建一个helloworld的deb包apt命令和apt-get命令
了解Linux软件包的组成




文件类型
保存目录




普通程序
/usr/bin


root权限程序
/usr/sbin


程序配置文件
/etc


日志文件
/var/log


文档文件
/usr/share/doc


Linux软件包


源码包
优点:
开源免费
自由裁剪功能
修改源代]]></description><category></category></item><item><title><![CDATA[Git简介和项目资料获取]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121249275</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121249275</guid><author>qq_42989787</author><pubDate>Wed, 10 Nov 2021 15:25:53 +0800</pubDate><description><![CDATA[这里写目录标题Git是什么？Git与GitHub、Gitee安装Git项目资料下载远程仓库克隆仓库仓库更新其他学习资料:
Git是什么？
版本控制工具
Git与GitHub、Gitee
本地仓库/远程仓库
安装Git
windows：
https://gitforwindows.org
Ubuntu:
sudo apt install git -y

项目资料下载
远程仓库

GitHub仓库地址：https://github.com/Embdefire/embed_linux_tutorial
Gitee]]></description><category></category></item><item><title><![CDATA[linux环境变量]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121238575</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121238575</guid><author>qq_42989787</author><pubDate>Tue, 09 Nov 2021 22:44:02 +0800</pubDate><description><![CDATA[linux环境变量
文章目录linux环境变量全局变量VS环境变量Shell 配置文件Shell 执行顺序修改配置文件shell启动方式对变量的影响

全局变量VS环境变量
直接定义
export

Shell 配置文件
与 Bash Shell 有关的配置文件主要有

/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
/etc/bashrc
/etc/bash.bashrc
/etc/profile.d/*.sh

Shell ]]></description><category></category></item><item><title><![CDATA[插件设备树]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121150926</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121150926</guid><author>qq_42989787</author><pubDate>Thu, 04 Nov 2021 20:51:25 +0800</pubDate><description><![CDATA[Device Tree Overlays："插件"设备树
传统设备树
批量管理硬件资源，机制僵化
"插件"设备树
模块化管理硬件资源，灵活定制
使用前提


内核配置
CONFIG_OF_OVERLAY = y
CONFIG_OF_CONFIGFS = y


挂载ConfigFS


mount x /sys/kernel/config -t configfs


案例说明
设备树：foo.dts
	/ {
		compatible = "corp,foo";
		
		/* On chip periph]]></description><category></category></item><item><title><![CDATA[Linux系统中查看设备树]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/121131208</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/121131208</guid><author>qq_42989787</author><pubDate>Wed, 03 Nov 2021 21:36:42 +0800</pubDate><description><![CDATA[Linux系统中查看设备树
ls /sys/firmware/devicetree/base
或者
ls /proc/device-tree


]]></description><category></category></item><item><title><![CDATA[Ubuntu下完全卸载source insight]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/120976730</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/120976730</guid><author>qq_42989787</author><pubDate>Tue, 26 Oct 2021 17:31:18 +0800</pubDate><description><![CDATA[Ubuntu下完全卸载Source Insight
完全卸载方法参考
#kill自己所有进程
killall -u itcode
#卸载Source Insight并删除用户数据
rm -rf ~/Documents/Source\ Insight/
rm -rf ~/.wine


]]></description><category></category></item><item><title><![CDATA[使用PF_PACKET发送自定义type以太网数据包]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/109130581</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/109130581</guid><author>qq_42989787</author><pubDate>Sat, 17 Oct 2020 12:34:02 +0800</pubDate><description><![CDATA[目标

利用PF_PACKET 和SOCK_RAW创建套接字发送一个任意的以太网帧

背景


以太网是一个链路层协议。大多数网络程序员关注网络栈的传输层及以上，所以不需要直接处理以太网帧，但是某些场景下关注传输层以下也是有必要的。如：
1）实现网络协议栈里面没有内置的以太网协议类型
2）为测试目的，产生一个畸形或者其它非常规帧


使用场景

已知发送方和接收方的mac地址，就可以使用这个以太网协议发送接收数据。

编程

使用PF_PACKET 和SOCK_RAW创建套接字

	if((fd = soc]]></description><category></category></item><item><title><![CDATA[基于单片机的modbus从机程序]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/108016421</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/108016421</guid><author>qq_42989787</author><pubDate>Sat, 15 Aug 2020 01:26:53 +0800</pubDate><description><![CDATA[基于新唐M031的modbus从机程序

一 、开发思路
我这里开发的平台是新唐M031，它是Cortex-M0的内核、32位单片机。因为要和上位机进行RS485通讯，所以选用了Modbus-RTU来作为通讯协议。我这是用串口接收中断+定时器中断来接收一帧数据，然后modbus从机程序自己手撸。
二、 Modbus介绍
modbus没什么好介绍的，熟悉下功能码就ok了。上链接  https://www.cnblogs.com/endv/p/8650491.html
三、 串口初始化及...]]></description><category></category></item><item><title><![CDATA[Linux Samba共享配置教程]]></title><link>https://blog.youkuaiyun.com/qq_42989787/article/details/107857175</link><guid>https://blog.youkuaiyun.com/qq_42989787/article/details/107857175</guid><author>qq_42989787</author><pubDate>Fri, 07 Aug 2020 10:42:52 +0800</pubDate><description><![CDATA[Linux Samba共享配置教程
一、 samba介绍
linux与windows共享文件一般的方法就是设置共享文件夹和搭建samba服务器。samba服务器作可以windows和linux交互的媒介，可以让windows用户轻松地在电脑上使用图形界面访问linux文件系统，并可以设置写入权限，实用性极佳。
二、 samba安装
首先需要安装samba程序，部分Ubuntu镜像已经自带；执行如下命令即可
    sudo apt-get install samba
    sudo apt-get ins]]></description><category></category></item></channel></rss>