
linux
文章平均质量分 95
深入理解Linux内部看不到的东西。
七斗星
好了,就这样吧
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一个测试记录:利用分段锁来处理并发情况下的资源竞争问题
文章目录问题描述测试代码测试1:不使用锁测试2:使用一把全局锁(大锁)测试3:使用分段锁测试结果测试代码简介别人的经验,我们的阶梯!在开发中经常遇到多个并发执行的线程,需要对同一个资源进行访问,也就是发生资源竞争。在这种场景中,一般的做法就是加锁,通过锁机制对临界区进行保护,以达到资源独占的目的。这篇文章主要描述的就是使用分段锁来解决这个问题,说起来很简单:就是把锁的粒度降低,以达到资源独占、最大程度避免竞争的目的。问题描述周末和朋友聊天说到最近的工作,他们有个项目,需要把之前的一个单片机程原创 2022-05-22 13:18:40 · 711 阅读 · 1 评论 -
Linux从头学16:操作系统在加载应用程序时,是如何把【页目录和页表】当做普通物理页进行操作的?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 目录 文章目录问题描述处理器接收的是线性地址,不是物理地址对页目录进行操作一级查表:构造线性地址的前 10 位,来确定页表的物理地址二级查表:构造线性地址的中间 10 位,来确定“普通页”的物理地址三级查表:构造线性地址的最后 12 位,来确定页“普通页”的页内偏移量三个地址段合体对页表进行操作一级查表二级查表三级查表在 x86 系统中,内存管理中的分页机制是非常重要的,在Linux操作系统相关的各种书籍中,这部分内.原创 2021-10-19 09:04:16 · 897 阅读 · 0 评论 -
Linux从头学09:x86 处理器如何进行-层层的内存保护?
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录实模式:bootloader 为程序计算段的基地址保护模式:bootloader 为自己创建段描述符确定 GDT 的地址创建代码段描述符创建数据段描述符创建栈段描述符段描述符是如何确保段的安全访问的?段寄存器高速缓存对段寄存器本身的保护对段界限的检查在上一篇文章中,我们已经顺利的从实模式,过渡到了保护模式。保护模式与实模式最本质的区别就是:保护模式使用了全局描述符表,用来保存每一个程序(bootloader.原创 2021-08-30 08:28:40 · 911 阅读 · 0 评论 -
WSL2:Windows 亲生的 Linux 子系统
作 者:道哥,10+年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。转 载:欢迎转载文章,转载需注明出处。文章目录安装 WSL2 的前提条件安装 WSL2安装桌面环境安装客户端配置 DISPLAY 环境变量安装服务端启动客户端中文支持在上一篇文章中,我们主要聊了一下:在 Windows 系统中,安装 WSL 子系统。文章在此:WSL:在 W.原创 2021-07-22 08:35:58 · 7384 阅读 · 6 评论 -
WSL2:在Windows系统中开发Linux程序的又一神器
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录什么是 WSL?什么是 WSL2?激活 WSL 服务安装 Ubuntu-18.04 操作系统通过 ssh 远程登录编译 Hello,World!作为一名嵌入式软件开发工程师,在 Linux 系统下写代码、编译、调试是避免不了的事情。但是很少有同学会直接拿一台 Linux 真机来作为工作平台,除非是那种利用远程服务器来编译的场景。更普遍的使用场景是:在一台 Windows/Mac 系统中,安装虚拟机,然后在.原创 2021-07-20 08:23:27 · 1639 阅读 · 1 评论 -
Linux 从头学 01:CPU 是如何执行一条指令的?
作 者:道哥,10+年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。转 载:欢迎转载文章,转载需注明出处。文章目录【Linux 从头学】是什么古老的 Intel8086 处理器主存储器是什么?寄存器是什么?三个总线CPU 如何对内存进行寻址?我们是如何控制 CPU 的?CPU 执行指令流程【Linux 从头学】是什么这两年多以来,我的本职..原创 2021-07-02 08:22:43 · 2252 阅读 · 25 评论 -
一次脑残的记录: Linux 中实时任务调度与优先级
背景知识:Linux 调度策略关于进程的调度策略,不同的操作系统有不同的整体目标,因此调度算法也就各不相同。这需要根据进程的类型(计算密集型?IO密集型?)、优先级等因素来进行选择。对于 Linux x86 平台来说,一般采用的是 CFS:完全公平调度算法。之所以叫做完全公平,是因为操作系统以每个线程占用 CPU 的比率来进行动态的计算,操作系统希望每一个进程都能够平均的使用 CPU 这个资源,雨露均沾。我们在创建一个线程的时候,默认就是这个调度算法 SCHED_OTHER,默认的优...原创 2021-06-16 09:49:55 · 1834 阅读 · 0 评论 -
这 7 个 Linux 命令,你是怎么来使用的?
使用 Linux 系统的开发者,很多人都有自己喜欢的系统命令,下面这个几个命令令是我平常用的比较多的,分享一下。我不会教科书般的罗列每个指令的详细用法,只是把日常开发过程中的一些场景下,经常使用的命令常见用法进行演示。希望对您有小小的帮助~~也非常欢迎各位大侠,在留言区分享您的私房命令。No.1 grepgrep、awk、sed 这三个指令,作为 Linux 系统中文本处理的三大法宝,我最喜欢、最常用的就是 grep 指令,没有之一!它的基本用法是:grep [OPTIONS] PAT原创 2021-06-16 09:48:25 · 808 阅读 · 0 评论 -
为什么航天器、导弹喜欢用单片机,而不是嵌入式系统?
道哥的第 029 篇原创文章目录一、前言二、关于单片机与嵌入式系统之间界定1. 单片机2. 嵌入式系统3. 嵌入式Linux4. RTOS三、非实时、软实时、硬实时四、x86 Linux 系统的调度策略1. 为什么 Linux 系统是软实时的?2. Linux 系统如何改成硬实时?(1)RT-Preempt(2)Xenomai五、RTOS 的优势六、总结一、前言前几天和一个在某研究所的发小聊天,他说:现在的航空、航天和导弹等武器装备中,控制系统几乎都是用单片机,而不是嵌入式系统。乍一听,和我们的.原创 2021-03-16 14:41:45 · 1356 阅读 · 1 评论 -
C指针的这些使用技巧,掌握后立刻提升一个Level
这是道哥的第016篇原创关注+星标公众号,不错过最新文章文章目录一、前言二、八个示例1. 开胃菜:修改主调函数中的数据2. 在被调用函数中,分配系统资源2.1 错误用法2.2 正确用法3. 传递函数指针4. 指向结构体的指针5. 函数指针数组6. 在结构体中使用柔性数组7. 通过指针来获取结构体中成员变量的偏移量8. 通过结构体中成员变量的指针,来获取该结构体的指针三、总结一、前言半个月前写的那篇关于指针最底层原理的文章,得到了很多朋友的认可(链接: C语言指针-从底层原理到花式技巧,用.原创 2021-01-28 22:01:55 · 1066 阅读 · 0 评论 -
关于加密、证书的那些事
这是道哥的第012篇原创<文章目录前言一个典型的物联网产品数据加密明文传输的缺点加密传输加密方式可逆加密不可逆加密公钥和私钥证书如何申请证书如何确认证书的合法性单向认证和双向认证认证机构证书链证书文件的后缀名证书文件的格式PEM格式(Privacy Enhanced Mail)DER格式(Distinguished Encoding Rules)X.509标准证书格式OpenPGP协议/标准OpenPGP是什么?OpenPGP协议的实现OpenPGP的使用流程SSL/TLS协议分层握手过程HT.原创 2021-01-08 12:53:41 · 1636 阅读 · 3 评论 -
一步步教你:如何用Qemu来模拟ARM系统
这是道哥的第011篇原创文章目录前言为什么需要ARM模拟系统应用程序的开发系统开发(BSP)Qemu是什么?Qemu的两种模式Qemu 能做什么?或者说适合做什么?在 Ubuntu16.04 系统中,利用 Qemu 搭建一个ARM虚拟机使用Qemu虚拟机的几种选择测试平台安装交叉编译器编译内核kernel制作根文件系统利用Qemu启动ARM虚拟机测试HelloWorld应用程序总结软件下载地址前言前一段时间因为工作需要,我对ARM模拟器进行了一番调研。调研目的是:由于项目参与人员比较多,如果人手一.原创 2020-12-29 14:20:08 · 6215 阅读 · 4 评论 -
你只用do-while来实现循环?太浪费了!
这是道哥的第010篇原创文章目录前言在宏定义中的妙用错误的宏定义比较好的宏定义另一个也不错的宏定义在函数体中的妙用函数功能:返回错误代码对应的错误字符串函数功能:通过TCP Socket连接服务器解决多个return的问题解决goto的问题总结前言这篇文章讲解的知识点很小,但是在一些编程场合中非常适用,大家可以把这篇短文当做甜品来品味一下。地球人都知道,do-while语句是C/C++中的一个循环语句,特点是:至少执行一次循环体;在循环的尾部进行结束条件的判断。其实do-while.原创 2020-12-22 14:21:02 · 1012 阅读 · 0 评论 -
一步步分析:C语言如何面向对象编程
这是道哥的第009篇原创一、前言在嵌入式开发中,C/C++语言是使用最普及的,在C++11版本之前,它们的语法是比较相似的,只不过C++提供了面向对象的编程方式。虽然C++语言是从C语言发展而来的,但是今天的C++已经不是当年的C语言的扩展了,从2011版本开始,更像是一门全新的语言。那么没有想过,当初为什么要扩展出C++?C语言有什么样的缺点导致C++的产生?C++在这几个问题上的解决的确很好,但是随着语言标准的逐步扩充,C++语言的学习难度也逐渐加大。没有开发过几个项目,都不好意思原创 2020-12-20 17:07:36 · 1296 阅读 · 0 评论 -
深入LUA脚本语言,让你彻底明白调试原理
这是道哥的第008篇原创一、前言上篇文章我们聊了gdb的底层调试机制,明白了gdb是利用操作系统提供的系统信号来调试目标程序的。很多朋友私下留言了,看到能帮助到大家,我心里还是很开心的,其实这也是我继续输出文章的最大动力!后面我会继续把自己在项目开发中的实战经验进行总结。由于gdb的代码相对复杂,没有办法从代码层面仔细的分析调试细节,所以这次我们选择一个小巧、开源的Lua脚本语言,深入到最底层的代码中去探究一下代码调试真正是怎么一回事。不过请放心,虽然深入到代码最底层,但是理解难度并不大,只要C语原创 2020-12-18 08:28:47 · 3502 阅读 · 6 评论 -
原来gdb的底层调试原理这么简单
一、前言这篇文章来聊聊大名鼎鼎的GDB,它的豪门背景咱就不提了,和它的兄弟GCC一样是含着金钥匙出生的,在GNU的家族中的地位不可撼动。相信每位嵌入式开发工程师都使用过gdb来调试程序,如果你说没有用过,那只能说明你的开发经历还不够坎坷,还需要继续被 BUG吊打。我们都知道,在使用gcc编译时,可以使用-g选项在可执行文件中嵌入更多的调试信息,那么具体嵌入了哪些调试信息?这些调试信息是如何与二进制的指令之间进行相互交互?在调试的时候,调试信息中是如何获取函数调用栈中的上下文信息?针对上面这些疑惑,道原创 2020-12-14 09:58:35 · 3421 阅读 · 15 评论 -
拿来即用:用C+JS结构来处理JSON数据
【面对的问题】在物联网产品的开发过程中,对JSON格式的数据处理是一个强需求,例如亚马逊的 AWS IOT平台,设备与后台之间的通讯数据都是JSON格式,先瞄一眼大概的样子: 这是一个真实产品的通讯数据,设备端的代码C代码中利用cJSON这个开源工具来完成JSON字符的解析和组装工作。代码我这里就不贴了,解析函数很长,要滚动好多次鼠标滑轮。而且一不注意释放资源就会发生内存泄漏! 那么,是否有更好的方式来解决这个问题呢? 答案就是这篇文章介绍的duktap...原创 2020-06-23 19:17:51 · 1028 阅读 · 0 评论 -
拿来即用:分享一个检查内存泄漏的小工具
【功能描述】 在嵌入式系统应用程序开发过程中,内存泄漏是一个很严重也很头疼的问题。当然了,有很多的专业工具软件来检查内存泄漏,我用的比较多的是memwatch, valgrind。 这些工具主要是在开发过程中用来检查内存泄漏。但是,如果所有的程序都开发完成,开始集成测试时,仍然发现系统资源存在持续减少的情况,那么该如何处理呢? 这里提供的小工具就是用来处理这种情况的:可以监控你怀疑的、可能存在内存泄漏的那些进程使用的系统资源。 特别是...原创 2020-06-16 10:18:49 · 1261 阅读 · 1 评论 -
ubuntu添加自己的应用程序桌面图标
1. 往gnome桌面环境中添加自己的应用图标(1)把自己的可执行应用程序(例如Spreadsheet)放在PATH可以搜索到的路径中(我是放在/root/bin/中,且该路径已经加入PATH环境变量中) (2)如果需要有个性图标,把图像文件放在一个目录中(例如/root/icon/spreadsheet.gif)(3)# cd /usr/share/applications # v原创 2013-10-22 15:27:14 · 2192 阅读 · 0 评论 -
硬盘安装fedora14
一、安装准备首先,下载Fedora 13的DVD文件Fedora-13-i386-DVD.iso,可以直接去Fedora Project下载。如果你电脑上还没有安装grub,请去SrouceForge下载grub引导。使用硬盘管理软件修改电脑硬盘分区,使硬盘空出至少10G的未分区的硬盘安装空间。二、引导过程下面假设Fedora-13-i386-DVD.iso是放在D盘的ISO目录下,即D:\ISO原创 2013-10-22 15:26:44 · 1382 阅读 · 0 评论 -
使用PoEdit翻译PO文件(转贴)
很好的一篇关于使用PoEdit翻译PO文件的教程。原文链接:http://minibird.com/blog/149使用wordpress及其众多的主题或插件时,如果需要汉化,我们就会用到PO文件和MO文件。其中PO文件是一个翻译列表,可以编辑,MO文件由PO文件按生成,供程序读取。这是Wordpress利用GNU Gettext 工程的成果来实现软件的国际化和本地化的一种方法。 编写程序原创 2013-10-22 15:26:12 · 7155 阅读 · 0 评论 -
How to Switch Between GDM and KDM on Ubuntu
If you have installed the Kubuntu desktop on top of Ubuntu or the other way around, you may want to switch from gdm to kdm, or from kdm to gdm. This is an easy thing to do.Open a terminal window an原创 2013-10-22 15:26:08 · 1186 阅读 · 0 评论 -
ubuntu中KDE与GNOME安装切换
1.在Ubuntu中安装KDE桌面命令sudo apt-get install kUbuntu-desktop注销Ctrl Alt Backspace2.设置中文环境sudo apt-get install language-pack-kde-zh language-pack-kde-zh-base language-pack-zh language-pack-zh-base lang原创 2013-10-22 15:26:06 · 3982 阅读 · 0 评论 -
在Linux下开发多语言软件: Hello GetText!(转载)
作者联系方式:李先静 开发多语言软件是一件非常困难的事,各个国家的字符集的编码方式、货币符号、日期格式、数字格式、文字表现都各不相同,glibc提供了大量的函数处理这些事情,不再聱述了。这里要做的是,用一个简单的实例说明一下GetText的用法,GetText是一系列的工具和库函数,帮助程序员和翻译人员开发多语言软件的。GetText并不是一个神秘的东西,若非要在Win32下找一个东东原创 2013-10-22 15:25:46 · 1317 阅读 · 0 评论 -
在windows机器上远程登录ubuntu
一、使用VNC远程登录 通过将服务器配置成VNC SERVER,可以让其他主机使用图形方式登录这台服务器。在ubuntu下配置vnc server很简单,方法如下:服务器端:1、先安装VNC服务程序: $ sudo apt-get install vnc4-common vnc4server2、给当前用户设置vnc登录密码: $ vncpasswd2.5 修原创 2013-10-22 15:25:16 · 1331 阅读 · 0 评论 -
Ubuntu中安装星际译王及安装词典(转载)
原文:http://hi.baidu.com/zctyyy/item/e211c784d7d9f21ec3162790在windows下,有灵格斯、金山词霸,可以很方便去查 不认识的英语,但是当我们装了LINUX后星际译王就是一个很好 的类似词典,而且可以自己添加词典,安装配置方法如下:一、安装星际译王:sudo apt-get install stardict二、安装星际译王的词典1、在 htt原创 2013-10-22 15:29:01 · 1846 阅读 · 0 评论 -
使用 udev 高效、动态地管理 Linux 设备文件(转载)--1
转载自: 黄 懋, 软件工程师, IBM简介: 本文以通俗的方法阐述 udev 及相关术语的概念、udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例。本文会使那些需要高效地、方便地管理 Linux 设备的用户受益匪浅,这些用户包括 Linux 最终用户、设备驱动开发人员、设备测试人员和系统管理员等等。概述:Li原创 2013-10-22 15:27:58 · 1313 阅读 · 0 评论 -
ubuntu10.04 软件安装
1. wine 方法一:sudoadd-apt-repository ppa:ubuntu-wine/ppasudo apt-getupdatesudo apt-getinstall wine方法二:直接安装wine-cn源:#wine-cndebhttp://ppa.launchpad.net/wine-cn/ppa/ubuntu lucidmain sudo原创 2013-10-22 15:27:03 · 1150 阅读 · 0 评论 -
vim的默认设置
#vim ~/.vimrcset encoding=utf-8set hlsearchset backspace=2set autoindentset rulerset showmodeset nusyntax enablesyntax on原创 2013-10-22 15:27:08 · 1282 阅读 · 0 评论 -
X,X11,XFREE,WM,KDE,GNOME(转贴-写的超好)
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易 于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.一,linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的.图形界面并不是linux的一部原创 2013-10-22 15:26:30 · 1128 阅读 · 0 评论 -
ZWave 中的消息队列机制
文章主题 文章主题 在我们的日常编程中,对消息队列的需求非常常见,使用一个简洁、高效的消息队列编程模型,对于代码逻辑的清晰性,对于事件处理的高效率来说,是非常重要的。这篇文章就来看看 ZWave 中是通过什么机制为我们提供了一个便捷的消息队列处理机制。 内容导航 内容导航 消息队列是什么 我自己写的消息队列 ...原创 2019-01-26 11:54:00 · 1727 阅读 · 0 评论 -
linux下查看so文件的函数列表
nm -D XXX.soobjdump -tT XXX.so转载 2014-01-15 09:18:49 · 2460 阅读 · 0 评论 -
ubuntu10.04 安装gtk+-2.0
以下是在root权限下操作:1 安装gcc/g++/gdb/make 等基本编程工具apt-get install build-essential 2. 安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件apt-get install gnome-core-devel 3. 用于在编译GTK程序时自动找出头文件及库文件位置 apt-ge原创 2013-10-22 15:27:20 · 1656 阅读 · 0 评论 -
在ubuntu系统中 克隆git中心库源代码的bash脚本
1. 安装 expect> sudo apt-get install expect2.把以下脚本存储在 $HOME/bin/backup_git.sh ,并添加执行权限#!/bin/bash# login 1.249expect set timeout 100spawn ssh svn@192.168.1.249expect "*passwo原创 2013-10-22 13:16:49 · 1718 阅读 · 0 评论 -
ubuntu10.04 中安装 Xdialog
In more recent versions of Ubuntu the developers have decided that libgtk1.2/libglib1.2 is obsolete and therefore has been removed. Unfortunately for me this causes a problem as I like to use Xdialog原创 2013-10-22 15:27:48 · 1768 阅读 · 0 评论 -
使用 udev 高效、动态地管理 Linux 设备文件(转载)--3
udev 的简单规则:清单 10. 产生网卡设备文件的规则 SUBSYSTEM=="net", SYSFS{address}=="AA:BB:CC:DD:EE:FF", NAME="public_NIC"该规则表示:如果存在设备的子系统为 net,并且地址 (MAC address) 为“AA:BB:CC:DD:EE:FF”,为该设备产生一个名为 public_NIC 的设备文件。清单原创 2013-10-22 15:28:02 · 1414 阅读 · 0 评论 -
gtkdialog 编译时的 signal 结构体问题
编译时,遇到:glade_support.c:43: error: ‘signal’ redeclared as different kind of symbol解决:把 ./src/glade_support.c 中的结构体 typedef struct signal{ gchar *name; GCallback callback;}signal;改成:typedef struct _sign原创 2013-10-22 15:27:54 · 1551 阅读 · 0 评论 -
VMware 虚拟机上网
1. 虚拟机vmware设置网络连接方式为nat.2. 虚拟机设置静态IP: IP:192.168.0.2 掩码:255.255.255.0 网关:192.168.0.1 DNS:192.168.0.13. 在宿主机的连接属性中,选择高级,勾选“允许其他网络通过此计算机的.......”,网络连接中选择“...vmnet8”在虚拟机中重新连接或者reboot。原创 2013-10-22 15:27:05 · 1146 阅读 · 0 评论 -
Gedit中文乱码解决方法--转载
在终端执行:$ gconftool-2 --set --type=list --list-type=string /apps/gedit-2/preferences/encodings/auto_detected "[UTF-8,CURRENT,GB18030,BIG5-HKSCS,UTF-16]"原创 2013-10-22 15:27:01 · 1143 阅读 · 0 评论 -
ubuntu 添加sofeware sources and Key
以下是我自己实践得到的,不一定正确,仅供自己学习备份。 1. 通过命令行方式,直接添加PPA到software sources ,同时,把key也获取到。 例如:添加deb http://ppa.launchpad.net/team-xbmc-svn/ppa/ubuntu lucid main。 该PPA page原文如下:#########################原创 2013-10-22 15:24:34 · 1326 阅读 · 0 评论