- 博客(274)
- 资源 (2)
- 收藏
- 关注
原创 Linux物理内存模型
本文是Linux内存管理系列文章的第一篇,先对一些常见概念有一个基本的认知。Linux内存有哪三大结构?去本文中找答案吧!Multiprocessors系统设计内存架构的两种模式UMANUMALinux物理内存的三大结构Node: CPU和本地内存组成Node, 用 struct pglist_data 表示,放在一个数组里面。
2022-10-08 10:38:16
406
原创 kernel启动镜像不是vmlinux,而是它!
上一节我们介绍了vmlinux的编译过程。vmlinux是一个ELF文件,上百M,无法直接flash到板子上。由此可以发现,arm64的启动镜像为压缩后的。再进一步走到boot目录下的Makefile。
2022-10-07 17:13:49
380
原创 Linux kernel中.o文件的编译过程
在嵌入式Linux的开发过程中,内核编译是一个永远也绕不开的话题。了解整个内核的构造节省编译时间在编译报错时快速定位问题进一步了解内核的启动本文从Linux kernel中.o文件的编译探索kbuild机制。
2022-10-06 20:18:05
597
原创 如何编译并运行Linux系统?
学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。
2022-10-06 20:16:27
479
原创 全网最全的Mac代码风格总结
全网最全的Mac代码风格总结Mac的风格的代码样式,有谁会拒绝呢?那么怎样在文章、博文、PPT汇报等界面中将代码转换成Mac风格呢?岛主这里教大家4中方法1. 一个神奇的转换网站推荐指数:⭐⭐⭐⭐⭐只要将代码贴在上面,选择好自己喜欢的代码颜色样式以及背景样式,就可以一键导出Mac风格的代码截图,非常优雅有没有!评论回复“mac”获取网址链接。2. 万能的vscode插件推荐指数:⭐⭐⭐⭐⭐如果你使用vscode,那么只需下载插件:codeSnape。使用方法极其简单。选中代码右键点击
2022-05-09 21:42:19
1320
16
原创 什么是overcommit_memory?
1. 前言在日常的工作中可能我们会经常遇到程序fork失败的问题。遇到fork失败往往有两种可能性:进程数超标:可以通过cat /proc/sys/kernel/threads-max查看内存不足进程数预设值往往很大,几乎不太能超标,所以fork失败的原因大部分都是由于内存不足造成的。我们知道,由于MMU实现了虚拟地址到物理地址的转换,所以我们在申请虚拟地址时往往可以申请一大块内存,这实际上是对资源的有效利用,毕竟只有内存真正被投入使用时(如memset)才会实际分配物理内存,这种允许内存超额
2022-01-23 23:05:23
1295
原创 Github+jsDelivr搭建免费快速的个人图床
香!手把手搭建免费快速的个人图床本文同步发表如下平台:CSDN:https://editor.csdn.net/md?not_checkout=1&articleId=122026285知乎专栏:经常写博文的朋友对床图肯定不陌生。岛主习惯使用markdown撰写博客,将图片放在床图网站生成外链统一管理,这样一份博文就可以发布在不同的平台。不过免费的床图网站有时不稳定,付费价格又都不便宜。最近了解到了Github+jsDelivr的方式搭建个人床图,既稳定又快速还免费,突出一个香!搭
2021-12-19 17:02:49
1300
1
转载 hub和交换机区别
工作层次不同集线器工作在物理层,属于1层设备,每发送一个数据,所有的端口均可以收到,采用了广播的方式,因此网络性能受到很大的限制。交换机工作在数据链路层,属于2层设备,通过学习之后,每个端口形成一张MAC地址转发表,根据数据包的MAC地址转发数据,而不是广播形式。转发方式不同集线器的工作原理是广播形式,无论哪个端口收到数据之后,都要广播到所有的端口,当接入设备比较多时,网络性能会受到很大的影响。交换机根据MAC地址转发数据,收到数据包之后,检查报文的目的MAC地址,找到对应的端口进行转..
2021-11-27 23:19:01
758
原创 一图看懂结构体对齐
一图看懂C语言结构体对齐为什么需要结构体对齐?根本原因在于CPU访问数据的效率问题。不是所有的硬件平台都能访问任意地址的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据的,否则抛出异常。数据结构(尤其是栈)应尽可能在自然边界上对齐,因为在访问为对齐的内存时,处理器需要访问多次,而对齐的内存处理器只需要访问一次。对齐原则以 #pragma pack(x) 中 x 的大小和结构中占用空间最大的成员做比较,取小值为 n(外对齐依据)以 n 值和结构体每个成员比较,得出结果列表为 m[x
2021-11-20 22:01:24
247
原创 什么是内存乱序访问?
什么是内存乱序访问?文章目录什么是内存乱序访问?1. 编译乱序1.1 编译优化等级1.2 使用volatile1.3 编译器屏障1.4 加锁2. 运行乱序3. 总结不断深挖计算机底层的原理越发觉得有趣,今天聊聊内存乱序执行的话题。首先问个问题:我们写得程序会按照既定的顺序执行么?这似乎毫无疑问。但是了解编译、链接原理的“底层”知识,则不会轻易下定论。特别是在用到多线程涉及到内存共享没有加锁的时候,也会暴露这个问题。所以很遗憾,在某些情况下,程序指令的执行顺序会发生改变,这就产生了我们所说的内存乱序
2021-11-20 12:33:28
547
原创 一款练习汇编的神器——DosBox
往期回顾CPU的“三条”总线物理地址是怎么确定的?以8086为例前面两节简单地阐述了CPU和内存如何通信以及物理地址的确定方法。今天开始实战演练下如何操纵寄存器和内存,因为岛主是基于8086来学习的汇编,先不谈Linux,这里我们借助一款神器来通透的观察寄存器和内存——DosBox。DosBox体验一个裸机的环境,在一个没有操作系统的环境中直接对硬件编程是很酷的一件事情。学习汇编需要使用debug来帮助我们更好地了解计算机系统。王爽老师的《汇编语言》上级环境使用的是dos系统,我们现在一般不会装d
2021-11-20 10:42:25
1593
原创 物理地址是怎么确定的?以8086为例
物理地址我们知道,CPU 访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。8086是16位结构的CPU,这也就是说,在8086内部,能够一次性处理、传输、暂时存储的信息的最大长度是16位。内存单元的地址在送上地址总线之前,必须在CPU中处理、传输、暂时存放。而上一篇我们讲到,地址总线的宽度决定CPU的寻址能力。8086有20根地址总线,可以传送20位地址,所以其寻址能力为2^20B,即1
2021-11-20 10:10:17
4348
2
原创 结构体初始化的四种方法
结构体初始化的四种方法从事嵌入式开发后开始使用C来编程。刚开始觉得非常拧巴,经常阅读C代码也就慢慢习惯了。由于没有类的概念,结构体在C中大量使用,今天聊聊结构体变量初始化的四种方法。C语言中结构体初始化的四种方法举例: typede struct block { char name[32]; int type; int size; }block;方法一:定义时赋值 block test = {"version", 1, 32}; 需要注意对应的顺序,不能错
2021-11-20 09:01:55
21654
3
原创 如何制作文件系统并用qemu运行linux内核
上一文我们介绍了如何编译内核和busybox:如何编译Linux内核源码?本文介绍如何制作一个简版的文件系统、制作fs镜像文件并最终通过qemu将linux内核运行起来!制作一个简版文件系统编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:$ mkdir -p etc dev mnt proc sys tmp mnt$ mkdir -p etc/init.d/$ mkdir etc dev
2021-11-20 08:56:49
1036
原创 CPU的“三条”总线
年底前会集中研究汇编语言,顺便分享一波学习心得。在网上找到了一本神书:王爽老师的《汇编语言(第3版)》,内容通俗易懂,例子风趣活泼,相见恨晚。如果你也对汇编感兴趣想学一学,后台回复:汇编二字即可获取该书的电子版。汇编语言是面向机器的符号语言,也是一门低级语言……在这个不懂点Python都不好意思说话的大数据时代,学汇编是不是脑子进水了?非也!做底层开发、内核开发、驱动开发等,汇编语言扮演着及其重要的角色!汇编是直接控制硬件的唯一语言!汇编的执行速度比C还要快大概10倍!呵呵,勉强找了三个理由支撑
2021-11-14 11:01:00
2958
原创 如何编译Linux内核源码?
前言学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行一个mini版的文件系统也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。Linux用途广泛,包含的内容也琳琅满目。Linux系统的基础是内核、C库、工具集合系统的基本工具(如登录程序和Shell)。应用程序通过system call陷入内核,内核又通过驱动程序来与硬件交互。
2021-11-13 22:34:13
2607
原创 《OpenWrt智能路由系统开发》书摘
《OpenWrt智能路由系统开发》书摘前不久看到一位同事在看这本书,书中对嵌入式的基础知识做了一些介绍,书名说是开发,但是大部分都是配置的贴图。本书适合查漏补缺,书中的开发板则完全没必要买,岛主替大家划了重点,想看这本书的朋友可以后台私信或留言,提供电子版链接。关于 OpenWrtOpenWrt是嵌入式设备上运行的linux系统。OpenWrt 的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统,也加快了开发速度。你会发现无论是 ARM, PowerP
2021-03-06 22:24:09
1370
12
原创 程序库的制作和使用
库的概念库是二进制文件,包含的代码可被调用标准C库、数学库、线程库……库有源码,可下载后编译;也可以直接安装二进制包系统默认库的位置/lib /usr/lib库是事先编译好的,可以复用的代码win和Linux库不兼容LInux下包含静态库和共享库静态库优缺点编译(链接)时把静态库中的相关代码复制到可执行文件中程序 中以包含代码,运行是不再需要静态库程序运行时无须加载库,运行速度更快占用更多磁盘和内存空间静态库升级后,程序需要重新编译链接静态库的创建确定库中函
2020-11-22 20:42:38
279
原创 链队列实现字符串的读写
#include <stdio.h>#include <stdlib.h>#include <string.h>#define ERROR -1#define OK 0typedef char* ElemType;typedef struct Qnode{ ElemType data; struct Qnode* next;}Qnode, *QnodePtr;typedef struct LinkQueue{ Qnode* front;
2020-09-27 23:33:21
217
原创 CPU性能篇-平均负载
建立起整体性能的全局观不需要了解每个组件的所有实现细节uptime$ uptime02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88参数解析02:34:03 //当前时间up 2 days, 20:14 //系统运行时间1 user //正在登录用户数过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)Linu.
2020-08-06 06:09:28
769
1
原创 练习题
1. 顺时针旋转数组考点:二维数组索引的对应关系。#include <string>#include <iostream>#include <algorithm>#include <stdio.h>using namespace std;int main(){ int N; cin >> N; int f[12]...
2020-03-13 15:17:18
441
原创 Python练习记录
# -*- coding: utf-8 -*-n = eval(input())s = "Hello world"if n == 0: print(s)elif n > 0: for i in range(len(s)): if i % 2 == 0: print(s[i], end = '') else:...
2020-02-24 16:05:23
133
原创 如何阅读一篇论文
正文:如何阅读一篇论文Prof. S. Keshav, 滑铁卢大学 David R. Cheriton 计算机学院,加拿大原文链接摘要研究人员会花大量的时间去阅读研究论文,但很少有人会教读论文的方法,这造成了大量时间和精力上的浪费。本文会勾勒出一个高效可行的方法,用过三关的方式来阅读一篇论文。同时我会描述如何使用这个方法做文献调查。1. 介绍研究人员因为几个原因需要读论文:在学术会议或...
2020-01-30 16:08:05
219
原创 高精度算法总结
高精度算法总结(C++)A+a,A−a,A∗a,A/aA+a,A-a,A*a,A/aA+a,A−a,A∗a,A/a 四种大整数运算核心:将A的每一位放在数组里,且第0位存放个位数字,即逆序存放高精度加法核心:Ai+Bi+tAi + Bi + tAi+Bi+t参考题目:LeetCode989#include <iostream>#include <cstrin...
2019-12-22 15:31:16
164
原创 二叉树的遍历总结
二叉树的遍历总结前序遍历[leetcode144]遍历方式:“根结点-左孩子-右孩子”递归(Recursive)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeN...
2019-12-09 16:48:09
176
原创 Shell编程--运算符
02- Shell编程–运算符标签: Shell文章目录02- Shell编程--运算符Shell运算符算术运算符关系运算符布尔运算符字符串运算符文件测试运算符Shell运算符Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。算术运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk和 expr,expr 最常用...
2019-11-27 15:59:14
112
原创 Shell编程--入门
01- Shell脚本学习–入门标签: Shell文章目录01- Shell脚本学习--入门简介Hello World注释打印输出变量定义定义变量使用变量变量类型特殊变量`$*` 和 `$@` 的区别退出状态转义字符命令替换变量替换一个完整的shell示例简介Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本。Unix/Linux上常见的Shell脚本解释器有bash、s...
2019-11-27 15:09:06
110
原创 vim的私人订制
最近恶补嵌入式的知识,希望能做一些嵌入式和机器视觉相结合的有意思的东西。习惯了IDE,vim编写需要一些插件才能更高效。今天总结一下。安装插件管理Vundle克隆项目到本地git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim配置vimrc文件set nocompatible...
2019-11-21 15:54:25
225
原创 docker的安装和配置
第一次接触docker这个词是中兴的HR面时,今年的秋招虽然已经结束了,但是中兴的那位软件工程师还是让我印象深刻,他给了我很多未来的建议,在这由衷得感谢他。虽然没有成为同事,他向我推荐的docker我还是决定学一下。Docker是个啥?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可...
2019-11-20 11:27:14
122
原创 ubuntu开机出现initramfs解决办法
造成原因:虚拟机强制关机后Windows主机同时强制关机造成的!第一步:执行命令:fsck /dev/sda1 -y第二步:当出现FILE SYSTEM WAS MODIFIED这个的时候,就表示已经成功了第三步:reboot,重启即可...
2019-11-20 10:09:38
1068
原创 最大公约数和最小公倍数的极简代码
最小公倍数int lcm(int a, int b){ for (int i = a;; i++) if (i % a == 0 && i % b == 0) return i;}最大公约数int gcd(int a, int b){ for (int i = a; i; i--) if (a % i =...
2019-11-14 15:01:46
339
原创 愿我们每天都持续进步
1.01365=37.81.01^{365} = 37.81.01365=37.80.99365=0.030.99^{365} = 0.030.99365=0.03
2019-11-11 22:34:32
111
原创 如何保存Windows10锁屏聚焦的图片
保存Windows聚焦锁屏图片win + E — 切换到查看选项卡 — 勾选隐藏的项目复选框,以便显示所有隐藏的文件和文件夹。在系统盘搜索路径:C:\Users\guitar27\AppData\Local\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets其中guita...
2019-11-04 20:09:56
1108
原创 计算时间差值的方法
题目读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。请你计算游戏的持续时间。比赛最短持续1分钟,最长持续24小时。输入格式共一行,包含四个整数A,B,C,D。输出格式输出格式为“O JOGO DUROU X HORA(S) E Y MINUTO(S)”,表示游戏共持续了X小时Y分钟。数据...
2019-11-04 19:30:08
750
原创 三个数排序的极简方法
三个数按大小排序#include <iostream>int main() { int a, b, c; std::cin >> a >> b >> c; if (a < b) std::swap(a, b); if (a < c) std::swap(a, c); if (b < c) ...
2019-11-04 14:43:25
1475
原创 mysql笔记
MySQL:属于c/s架构的软件数据库的好处——1.持久化数据到本地2.可以实现结构化查询,方便管理数据库相关概念DB:数据库,保存一组有组织的数据的容器DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据SQL: 结构化查询语言,用于和DBMS通信的语言数据库存储数据的特点将数据放到表中,表再放到库中一个数据库中可以有多个表,每个表都有一个的名字,用来...
2019-10-26 17:52:38
233
Computer Vision with OpenCV 3 and Qt5
2018-07-21
《guide to high quality CPP and C programming》高质量的CPP和C程序
2018-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人