
Linux
文章平均质量分 56
天马行空_xaut
这个作者很懒,什么都没留下…
展开
-
#define IS_ENABLED(CONFIG_XXX)和#ifdef CONFIG_XXX
IS_ENABLED(CONFIG_XXX)判断y和m为真,也就是无论编译进内核还是模块都为真,只有n为假。所以#ifdef CONFIG_XXX只能判断是不是设置为y,也就是编译进内核,如果是m或者n则为假。原创 2022-12-16 14:33:54 · 1558 阅读 · 0 评论 -
OpenEuler 22.03安装桌面
官方也有提供安装桌面的方式,但是看起来很复杂,手敲的太多容易出错,这里可以先把文件cp到另一台电脑上修改,修改完在cp回去。5.设置gdm自动启动。6.设置图形界面登录。原创 2022-10-09 10:48:06 · 3099 阅读 · 0 评论 -
内存初始化主要流程代码注释
【代码】内存初始化主要流程代码注释。转载 2022-09-16 16:29:22 · 301 阅读 · 0 评论 -
从pfn_to_page/page_to_pfn看linux SPARSEMEM内存模型
本文以arm64架构为背景。一 背景计算机中的物理内存本来是没有没有页/page的概念的,Linux为了各种冠冕堂皇的理由,硬生生的将计算机中的物理内存以page为单位划分成一个一个的小方块,称作页框,每个页框有一个编号叫做PFN;有了PFN,就能够计算出这个页框对应的物理地址,有了物理地址CPU就能够通过总线访问到对应的内存。转载 2022-09-15 11:42:09 · 989 阅读 · 0 评论 -
自旋锁 spin_lock、 spin_lock_irq 以及 spin_lock_irqsave 的区别
能够停留下来认真读这篇文章的人大部分都已经了解了什么是自旋锁,至少知道自旋锁就是不停的询问资源有没有准备好的一把锁,这个从概念上很容易理解,当然他的内在也是很容易实现。为什么需要自旋锁很多时候我们并不能采用其他的锁,比如读写锁、互斥锁、信号量等。一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的、极短的临界区完全是一种性能损耗;另一方面在中断上下文是不允许睡眠的,除了自旋锁以外的其他任何形式的锁都有可能导致睡眠或者进程切换,这是违背了中断的设计初衷,会发生不可预知的错误。基于两点,我转载 2022-04-23 21:12:32 · 709 阅读 · 0 评论 -
linux下设置CPU频率
cpufreq-set -c 0 -g powersave我们需要安装cpufrequtils。此软件是查看cpu当前频率以及修改频率、选择cpu、选择cpu运行方式的。注意,只支持某些可调节频率的cpu,如intel的笔记本cpu。可能可以超频 ,没敢实验,那位试试看好了。sudo apt-get install cpufrequtils使用方法cpufreq-info, cpufreq-selector, cpufreq-set。具体用法可以看man,或者在命令后加-h。比如..原创 2022-03-30 11:42:04 · 6151 阅读 · 0 评论 -
Ubuntu20.04 编译替换kernel内核记录
1.下载kernel sorce code,从kernel.org上下载或在直接用git clone,或者在国内mirror上下载镜像。2.为了方便,用su切换到root权限,代码放在/usr/src/目录下,解压代码。3.配置config:a. 打开源码路径:cd /usr/src/linux-xxxxb. cp /boot/config-xxxxx .configc. make menuconfig-->load-->sav...原创 2022-03-08 15:36:55 · 2862 阅读 · 0 评论 -
实用技术论坛
1.蜗蜗科技2.深入浅出BPF:深入浅出 eBPF | 专注于 Linux 内核技术eBPF (Linux/Kernel/XDP/BCC/BPFTrace/Cillium)深入浅出 Linux 内核 BPFhttps://www.ebpf.top/原创 2021-11-10 14:11:28 · 846 阅读 · 0 评论 -
ubuntu增加用户并且添加到root组
useradd username -m设置密码passwd username Enter new UNIX password: 123456Retype new UNIX password: 123456改变组usermod -g root username确定是否在root组id usernameuid=1001(username) gid=0(root) groups=0(root)``原创 2021-08-31 14:11:49 · 2895 阅读 · 0 评论 -
编译链接脚本lds文件
转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml一、 概论每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制.链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空间内的布局. 但你也可以用连接命令做一些其他事情.连接器有个默认的内置连接脚本, 可用ld –verbose查看. 连接选项-r和-N可以影响默认.转载 2021-08-16 14:43:43 · 3141 阅读 · 0 评论 -
__asm__ __volatile__ GCC的内嵌汇编语法 AT&T汇编语言语法
GCC的内嵌汇编语法 AT&T汇编语言语法__asm__ __volatile__ GCC的内嵌汇编语法 AT&T汇编语言语法(一)2007年05月09日 12:36开 发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限 制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可 能并不喜欢它。...转载 2021-07-06 16:17:13 · 469 阅读 · 0 评论 -
Linux 中断过程堆栈切换之trampoline stack
查了一天堆栈切换的资料,发现大家都在讲user stack 、kernel stack、interrupt stack、IST,但是没有人讲一下trampoline stack,这对初入kernel的小伙伴不太友好的trampoline stack,这里分享一下心得:进程在执行的时候,必然会使用到系统调用或者中断,按照SDM中的描述,中断发生时,硬件会自动切换堆栈到内核堆栈:这个切换后的堆栈的地址是存放在TSS中ESP0(或RSP0)中的:问题是RSP0中存放的到底是哪个stack?原创 2021-06-30 10:48:12 · 1423 阅读 · 0 评论 -
64位OS下编译32-bit busybox
默认在64位OS下编译的busybox是64-bit的,那么如何编译32-bit busybox呢?难不成要装一个32-bit OS?在网上找了很多方法,很复杂,其中一个是增加i386的参数,编译的时候显示不支援,收到启发,直接用-m32就可以了啊,试了一下,果然成功了,简单又稳定的方法,分享一下:...原创 2021-06-23 15:06:13 · 585 阅读 · 0 评论 -
qemu指定CPU型号
QEMU+GDB调试Linux内核总结(全)https://blog.youkuaiyun.com/weixin_37867857/article/details/88205130?spm=1001.2014.3001.5506#t0原创 2021-06-04 17:46:34 · 6138 阅读 · 0 评论 -
linux 5.11系统调用号(x86) 编译后准确版
__SYSCALL_I386(0, sys_restart_syscall)__SYSCALL_I386(1, sys_exit)__SYSCALL_I386(2, sys_fork)__SYSCALL_I386(3, sys_read)__SYSCALL_I386(4, sys_write)#ifdef CONFIG_X86_32__SYSCALL_I386(5, sys_open)#else__SYSCALL_I386(5, compat_sys_open)#endif__SYSC.原创 2021-06-04 17:28:44 · 704 阅读 · 0 评论 -
LINUX加载一个可执行程序并启动的过程
原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000作者:严哲璟以shell下执行ls命令为例介绍Linux通过fork()和execve()类函数的执行程序启动过程:父进程为shell,命令为ls,目录为/bin/ls当输入ls时,shell进程通过fork()创建一个新的子进程,fork()进程复制代码,以及新建堆栈等之前已经说明,子进程有机会执行的时候,在ret_from...转载 2021-06-02 09:58:36 · 973 阅读 · 0 评论 -
如何在word贴出高亮风格的代码(亲测)
1.进入网站:https://highlightcode.com/2.复制代码到编辑框内,单击Start Highlight2.网页会显示出高亮后的结果:3.复制网页上的结果并粘贴到work,注意需要保留原来的格式:4.还可以用word的功能对格式进行调整,可以参考https://highlightcode.com/wordstyle:5.调整后的风格如下:...原创 2021-04-27 11:52:33 · 3732 阅读 · 1 评论 -
numactl测试numa间读写速率
1.numactl命令可以用来查看numa的状态,如下两种方式:henry@henry-HX001:~$ numactl -spolicy: defaultpreferred node: currentphyscpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cpubind: 0 1 nodebind: 0 1 membind: 0 1 主要可以看到node的数量和拓扑结构组成henry@henry-HX001:~$ numactl原创 2021-04-22 19:13:11 · 2213 阅读 · 0 评论 -
订阅Linux kernel邮件及可能遇到的问题
订阅Linux kernel的邮件,也就是将自己的邮箱加入对应的邮件Group中,这是一个自动处理的流程,给majordomo@vger.kernel.org发送命令,请求加入对应的邮件group中,当然也可以发送其他命令让这个系统返回你想要查询的信息。订阅步骤如下:1.先在下边的网站中找到你需要订阅的模块:http://vger.kernel.org/vger-lists.html比如:List: linux-usb; ( subscribe / unsubscribe )原创 2021-04-13 15:00:40 · 8889 阅读 · 0 评论 -
Linux perf使用
https://perf.wiki.kernel.org/index.php/Tutorialhttps://perf.wiki.kernel.org/index.php/Main_Pagehttps://perf.wiki.kernel.org/index.php/Perf_tools_support_for_Intel%C2%AE_Processor_Trace使用例子:http://www.brendangregg.com/perf.html...原创 2021-04-07 16:36:27 · 153 阅读 · 0 评论 -
Linux发行版本
转自:http://www.ha97.com/883.html帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因。它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系统),通常被视为世界各地的Linux用户最广泛推荐的。没有数字能够完全统计还有许多 其他的发行版可能更好适合您的特定目的,但作为一般规则,所有这些发行版都很受欢迎,有非常活跃的论坛或邮件列表,你可以问任何问题。Ubuntu, Linux ..转载 2021-04-02 16:25:30 · 333 阅读 · 0 评论 -
GNU和Linux的关系和发音
Linux是GNU的软件的一部分,所有Linux严格意义上应该是GNU/Linux,发音请参考官方录音:http://www.gnu.org/gnu/pronunciation.html原创 2021-04-01 14:54:42 · 365 阅读 · 0 评论 -
用GDB跟踪汇编代码排查返回值
原创文章,转载请注明出处~平台为兆芯x86-64 CPU前边《嵌入式汇编实现系统调用-rename》中有发现用libc的rename函数实现的时候,如果原本的文件不存在,会返回-1(Operation not permitted),为了找到原因,我们用GDB跟踪汇编代码执行过程。1.首先编译过程加入参数-g方便gdb调试:root@henry-002:/usr/test_code# gcc rename_libc.c -o rename_libc_debug --static -g2.原创 2021-03-18 15:34:43 · 926 阅读 · 0 评论 -
man分别查看命令和系统调用函数说明
linux上在使用man查看函数的时候,如果遇到相同名字的命令,发现只是会显示命令的说明,并不会显示函数的说明,如要查看libc的rename()函数的说明:输入man rename,但是显示的是shell命令rename,并不是函数rename()的说明,这是因为man默认显示第1卷上的说明。此时输入man 2 rename则会显示系统调用rename的说明,或者使用man -a rename查找所有的卷上rename说明。man的分卷号,分成很多部分,分别是:1 用户命令, 可由任何人启原创 2021-03-17 16:53:34 · 1392 阅读 · 0 评论 -
嵌入式汇编实现系统调用-rename
原创文章,转载请标注出处~平台为兆芯x86-64环境rename系统调用有两个入参,有一个返回值,首先用libc实现功能:#include <stdio.h>#include <string.h>int main(void){ int error = -1; char *oldname = "hello.c"; char *newname = "newhello.c"; error = rename(oldname,newname)原创 2021-03-17 11:49:08 · 354 阅读 · 0 评论 -
嵌入式汇编实现系统调用-sysinfo
平台为兆芯x86-64平台,原创文章,转载请标注出处~在前一篇文章中,使用嵌入式汇编实现了time系统调用,这个系统调用没有入参,今天使用嵌入式汇编实现sysinfo,此系统调用有一个指针入参。首先使用libc实现sysinfo的调用:#include <sys/sysinfo.h>#include <stdio.h>#include <string.h>int main(){ int errno = -1; long uptime =原创 2021-03-16 19:35:35 · 311 阅读 · 0 评论 -
嵌入式汇编实现系统调用-time
平台为x86-64系统调用是用户层调用linux服务的最常用的方式,但是大家通常使用封装好的库函数,比如libc提供的API进行使用,本篇文章使用嵌入式汇编实现time的系统调用。首先使用libc编写一段程序做为对比:#include<stdio.h>#include<time.h>int main(void){ time_t timer = 0; struct tm *tblock; timer = time(NULL); //获取当前时原创 2021-03-16 17:55:21 · 603 阅读 · 0 评论 -
GDT,LDT,GDTR,LDTR 详解,包你理解透彻
本文转自技术部落:https://www.techbulo.com/708.html一、引入保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引段寄存器PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段。二、详解先说明一下概念(1)全局描述符转载 2021-01-21 17:44:08 · 1015 阅读 · 0 评论 -
Notepad++去掉CR
在windows下创建shell脚本总是无法执行,最终查到是windows的文件格式与linux不同,转换方式:选择notepad++ 编辑--》档案格式转换--》转换为UNIX格式原创 2020-08-21 19:47:31 · 2067 阅读 · 0 评论 -
Linux 运行时关闭指定CPU核
Linux Hotplug a CPU and Disable CPU Cores At Run Timelast updatedMay 26, 2015inCategoriesCentOS,Debian / Ubuntu,Fedora Linux,Hardware,Linux,RedHat and Friends,Suse,Troubleshooting,Ubuntu LinuxIwould like to dynamically enable or disable...转载 2020-08-18 14:04:56 · 5899 阅读 · 0 评论 -
Linux 有价值的网站
1.the linux Document project :https://tldp.org/ a.https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html原创 2020-08-14 10:01:49 · 163 阅读 · 0 评论 -
mbw 可以测试DDR读写速度
mbw memory benchmark v1.4,https://github.com/raas/mbwUsage: mbw [options] array_size_in_MiBOptions: -n: number of runs per test (0 to run forever) -a: Don't display average -t0: memcpy test -t1: dumb (b[i]=a[i] style) tes...原创 2020-08-13 19:37:40 · 940 阅读 · 0 评论 -
ldconfig 动态更改本地library 版本问题
遇到一个问题,平台上的library版本被更新导致无法开机:正常:lrwxrwxrwx 1 19545752 19545752 14 Aug 11 2020 libxx.so -> libxx.so.2.0-rw-rw-r-- 1 19545752 19545752 326368 Aug 11 2020 libxx.so.2.0-rwxrwxr-x 1 19545752 19545752 768172 Aug 11 2020 libxx.s...原创 2020-08-13 13:27:21 · 243 阅读 · 0 评论 -
gcc和g++的编译选项
gcc和g++都是GNU(一个组织)的编译器。1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。3、编译阶段,g++会调用gcc;4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序使用的库连接。gcc有时会出错gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件转换成汇编语言,生成文件.s[编译...转载 2020-08-12 11:23:37 · 371 阅读 · 0 评论 -
linux CMA 布局
CMA 布局策略转自:https://biscuitos.github.io/blog/CMA-layout/#C019CMA20 Dec 2019Email: BuddyZhang1buddy.zhang@aliyun.com目录 CMA 布局简介 CMA 内核部署 CMA 内核宏详解 CMA 方案配置 CMA 方案配置之 DTS CMA 方案配置之 CMDLINE CMA 方.转载 2020-07-21 14:05:41 · 1399 阅读 · 0 评论 -
Linux内核工作队列如何传参数
转自:http://blog.sina.com.cn/s/blog_4ba5b45e0102e3q2.htmlLinux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别提供了简单的实作案例。工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在.转载 2020-07-07 20:58:53 · 1791 阅读 · 1 评论 -
USB resume flow分析(1)
USB resume 跟随系统的resume的flow:1.对interface进行resume操作:async_resume ==》device_resume==》dpm_run_callback==》usb_dev_restore==》usb_resume ==》usb_resume_both ==》usb_resume_interface,如果设备是一个hub的话==》hub_reset_resume2.对device进行resume操作:前边的flow一样,usb_resume_both .原创 2020-06-09 19:48:05 · 390 阅读 · 0 评论 -
Linux USB 中persist的作用
对应一个USB device设备可以设置persist的属性,一般默认为1表示STR开机后可以做reset恢复/sys/bus/usb/devices/2-1/power/persist但是通常情况,嵌入式USB在STR之后处于断电状态,需要重新连接,则将/sys/bus/usb/devices/2-1/power/persist设置为0即可。主要区别在:hub_activate()中,如果为0则会走到: /* The power session is gone;...原创 2020-06-09 15:51:05 · 796 阅读 · 0 评论 -
linux 删除时忽略若干文件
find /home/tmp/ -maxdepth 1 ! -name "tmp" ! -name "234" ! -name "123" | xargs rm -rf需要主要的是! -name "tmp"是忽略掉查找的目录,这个一定要加入,否则会将整个目录全部删掉,234和123是需要忽略掉的目录或文件,如果还有其他的可以继续加入...原创 2020-03-04 14:46:15 · 282 阅读 · 0 评论 -
Linux用户态进程的内存管理(经典)
https://www.sohu.com/a/282073912_467784转载 2020-02-29 01:05:50 · 199 阅读 · 0 评论