Linux笔记
Linux杂谈文章
程序猿Ricky的日常干货
擅长扫地、打杂、开车。。
展开
-
dhcp client的加快配置的方法
修改dhclient.conf中的超时时间:timeout 60;retry 10;backoff-cutoff 20;initial-interval 5;reboot 10;原创 2021-12-02 15:09:11 · 1717 阅读 · 0 评论 -
centos内核编译安装与grub2启动配置
内核编译与安装makemake modulesmake modules_installmake install注意一定要先安装module,再安装kernel,因为安装kernel涉及到initramfs的安装,所以如果没有编译module就安装内核,可能会导致系统起不来。grub2配置配置文件:/boot/grub2/grub.cfg/boot/grub2/grubenv 有些人会访问修改/etc/grub2.cfg,实际上它也是上面文件的链接:ls -l /etc/grub2.原创 2020-08-31 16:12:22 · 2678 阅读 · 0 评论 -
systemd启动流程分析
systemd启动过程systemd启动时会默认启动default.target配置,并且递归的处理它的依赖关系,一般这个配置为graphical.target 或者 multi-user.target。第一种会启动图形界面,第二种会启动多用户字符模式。下图是关键服务配置的启动依赖:下面将简单介绍启动中的4个关键步骤:第一步systemd 执行默认target 配置,配置文件/etc/systemd/system/default.target,它一般是一个软链接,指向multi-user.targ原创 2020-08-19 12:22:08 · 8587 阅读 · 0 评论 -
Linux kernel分支管理与维护
mainline分支维护Linux kernel的主线分支只有一个master分支,该分支由Linus Torvalds维护,对于不同的版本的内核是采用打tag的方式进行发布的,一般在发布一个正式版本之前,都会先发布一系列的候选版本,比如linux-5.6最终版发布之前先发布了linux-5.6.rc1到linux-5.6.rc7,rc值越大越接近最终版本linux-5.6。从linux-3....原创 2020-04-16 20:09:24 · 2277 阅读 · 0 评论 -
一个简单的网络服务端demo示例
/*linux socket server demo**date:2016-2-10**author:xiehaocheng**/#include<sys/types.h> /* basic system data types */#include<sys/socket.h> /* basic socket definitions */#includ...原创 2018-07-09 16:56:58 · 750 阅读 · 0 评论 -
一个简单网络客户端demo示例
#include <stdio.h>#include <stdlib.h>#include <sys/types.h> /* basic system data types */#include <sys/socket.h> /* basic socket definitions */#include <netinet/in.h>...原创 2018-07-09 16:56:04 · 763 阅读 · 0 评论 -
valgrind (三)--suppression文件
suppressionvalgrind这个特性是为了屏蔽不必要的error报错,由于valgrind是针对每个指令的监控,所以当每一条指令出现错误时都会相应的报错,而有一些错误是存在于系统lib库中的,而不是作为我们的代码中存在的,这些错误我们是不care的,但是每次执行都会报出来,这样很不好看,因此valgrind提供这个suppression的特性用来忽略某些报错。默认情况下我们在安装va...原创 2019-05-28 18:40:06 · 2907 阅读 · 0 评论 -
终端、伪终端、虚拟控制台、系统控制台
终端终端是一个大的概念,在Linux中把所有可以作为控制终端的设备统称为终端,比如伪终端、虚拟控制台、串口终端等等。伪终端伪终端简称为pty,是Unix/Linux系统提供的一种机制,它模拟了物理终端的行为方式,从而让连接的程序认为和普通的终端没有区别,因此被叫做伪终端。伪终端包含master端和slave端,都是成对出现的,以System V风格实现的伪终端为例(ubuntu):maste...原创 2019-06-03 19:35:00 · 1919 阅读 · 0 评论 -
二叉树的遍历方式
二叉树,每个根节点有1个左节点和1个右节点遍历方式有3种:前序遍历(先根遍历)a. 访问根节点b. 访问左子树c. 访问右子树中序遍历(中根遍历)a. 访问左子树b. 访问根节点c. 访问右子树后序遍历(后根遍历)a. 访问左子树b. 访问右子树c. 访问根节点举例说明如下: A / \ B ...原创 2019-07-01 20:36:01 · 1420 阅读 · 0 评论 -
RT Preempt Linux简介
RTOS (实时操作系统)什么是实时操作系统?实时操作系统要求在一个触发信号到来之后能够在一个确定的时间点之前进行响应处理。它与普通的非实时操作系统区别在于:普通操作系统的响应延时受系统负载影响较大,轻负载时可能会满足响应的要求,但是在负载变大的时候响应会变慢,并且这个响应时间是不确定的。因此一个足够快的系统不代表是一个实时操作系统,实时系统必须要求在负载变化的情况下依然能够满足确定的响应...原创 2019-07-03 11:59:57 · 10054 阅读 · 0 评论 -
常用的两种hash算法
string hash算法/* * A simple string hash algorithm * * (Java is using the same algorithm) * * */unsigned int string_hash_calculate(char *key){ char *p = key; unsigned int h = 0; ...原创 2019-07-25 11:32:14 · 430 阅读 · 0 评论 -
bootloader启动参数传递(二)
1.dtb是怎么传递给kernel的?首先base dtb是与kernel一起打包进boot.img中的,dtbo是一个单独分区存储,bootloader加载后整合后传递给kernel。通过把地址赋值给对应的寄存器,从而让内核知道对应的dtb信息的,对于arm32,是r2寄存器;对于arm64,是x0寄存器。2.ramdisk信息是怎么传递给kernel的?ramdisk可以打包到kern...原创 2019-07-30 17:00:17 · 1814 阅读 · 0 评论 -
文件系统挂载选项journal
什么是journal日志作为日志文件系统,ext4使用journal来对文件系统操作进行记录,它和文件系统数据是分开进行管理的,当我们写入文件系统时,会先把最新的数据保存在journal区域中,然后再写入到真正文件系统中,当多次写入时会不停的更新journal中的数据内容,以保持最新的写入数据。这样做保证了文件系统的可靠性,并且当文件系统出现问题时,利于分析问题。journal block的创...原创 2019-08-19 19:56:36 · 4147 阅读 · 0 评论 -
系统检测分析工具--free、vmstat、slabtop、top
free命令详细介绍$ free -h total used free shared buff/cache availableMem: 15G 6.9G 201M 197M 8.5G 8.2GSwap: 2.0G...原创 2019-05-17 17:49:47 · 2620 阅读 · 0 评论 -
Linux上层关机和reboot流程
从reboot命令开始void reboot_main(void){ int types[] = {RB_AUTOBOOT, RB_HALT_SYSTEM, RB_POWER_OFF}, sigs[] = {SIGTERM, SIGUSR1, SIGUSR2}, idx; if (!(toys.optflags & FLAG_n)) sync(); idx ...原创 2019-05-16 19:39:50 · 3679 阅读 · 0 评论 -
valgrind (二)--函数调用分析
既上一篇介绍了使用valgrind进行内存泄露和内存越界访问检查之后,本文介绍如何使用valgrind进行函数调用的性能分析。使用方法测试代码和编译步骤参见我的上一篇博文《valgrind (一)–检测内存泄露和内存越界》。这里只介绍如何进行性能分析。再开始之前首先安装一下需要使用的工具:sudo apt-get install valgrindsudo apt-get install p...原创 2019-05-10 16:58:09 · 1446 阅读 · 0 评论 -
GPT分区
GPT的全称是GUID Partition Table,它是一种使用GUID来标示的标准分区表格式。 这种分区表格式是可以用于BIOS系统启动的,因为它保留了MBR分区。因此可以作为windows启动盘分区。MBR是一个固化的启动程序,一般是在BIOS系统中需要,它是存在于硬盘的第一个扇区,主要作用是加载win操作系统。 我们接下来看一下GPT分区表的格式: LBA0———–Protect M原创 2016-07-27 11:24:50 · 2746 阅读 · 0 评论 -
android固件集成
作为一套完整的build集成系统,需要包含两方面的内容,一个就是烧写软件,另一个就是完整固件。这两者应该是分开的,完整固件里面不应该包括任何跟烧写相关的内容。本文将围绕炬力s900方案的固件集成环境来做一个介绍。烧写组件 炬力方案集成出的android固件应该包括几个文件,其中有一个是.fw为后缀的,它是炬力firmware文件,其中打包的就是烧写套件。一般炬力的量产工具都是通过usb来做烧写,这原创 2016-07-27 16:36:34 · 2646 阅读 · 0 评论 -
ramfs,rootfs,initramfs,initrd
Ramfs是linux中的一个内存文件系统,它的大小是根据当前系统的内存大小动态变化的。也就是说除非系统内存使用完了,不然我们都是可以往ramfs中写入数据的。ramfs只是一个镜像文件,作为一个镜像文件,我们肯定没有办法直接读取其中的内容,那么怎么办呢?在linux中有一种loop设备可以用来读取镜像文件,通过losetup来挂载ramfs当做一个loop设备,然后对其进行挂载,我们就可以进入这个原创 2016-07-27 20:05:27 · 2375 阅读 · 0 评论 -
Tmux--终端分割,让终端更好用
1.安装Tmux软件包sudo apt-get install tmux2.创建会话tmux new -s <your session name>或者在一个会话中使用快捷键创建另一个新的会话:按下Ctrl-b:然后输入如下命令:new -s <your session name>除非显式地关闭会话,否则 Tmux 的会话在重启计算机之前都不会消失。只要还没有重启计算机,你都可以自由地从一个项目原创 2016-10-21 11:27:02 · 5092 阅读 · 0 评论 -
Linux系统从uboot到内核启动流程
1. BROM引导:ARM CPU刚上电时,它的PC寄存器指针指向IC内嵌的一片ROM的起始位置处,这片ROM称之为BROM(boot rom),系统就是通过这片BROM引导起来的。BROM的空间比较小,一般是32/64KB,IC上的ShareRAM大小也不尽相同,所以IC引导过程也是会有所不同。BROM中会存储上电引导程序,这段程序也一般会包括以下几个内容:1. CPU上电初始化操作。2...原创 2018-11-13 14:13:28 · 9409 阅读 · 0 评论 -
Core Dump调试
环境本文以笔者操作系统ubuntu14.04 LTS为例介绍core dump功能。首先查看系统是否使能了core dump功能:$ ulimit -c0返回0表示没有使能,我们需要使能该功能:ulimit -c 1示例#include <unistd.h>#include <stdio.h>#include <errno.h>int...原创 2019-03-19 15:12:31 · 1645 阅读 · 0 评论 -
如何判断当前的进程是否以root权限运行?
当前登录系统的用户叫做实际用户,而实际运行的进程是以有效用户ID来进行访问权限管理的,正常情况下有效用户就是实际用户,但是如果我们使用了sudo或者使能了设置用户ID位,按照前面文章的介绍,这个有效用户是可能改变的,比如使用sudo执行,进程的有效用户ID就会变为root,那么此进程就相当于具有了root权限。如果我们的程序只允许使用root运行,那么该如何设计呢?C语言程序设计#inclu...原创 2019-03-21 19:17:01 · 6114 阅读 · 0 评论 -
Linux系统默认PATH环境变量的设置
当系统启动后,想要运行一个程序,大部分情况下我们都是直接使用程序名即可运行,那是因为系统中的PATH环境变量已经添加了程序所在的目录,程序加载器会查找PATH环境变量来确定该程序所在的绝对路径。init进程中的实现系统在启动时第一个运行的用户空间进程叫init,init进程在启动时会去配置PATH环境变量,而其他用户进程都是由init进程fork产生,所以其他进程都会继承该默认的PATH配置了...原创 2019-03-18 18:53:24 · 4866 阅读 · 0 评论 -
Linux程序动态库的加载
查看可执行文件中依赖的动态库:$ readelf -d /bin/shDynamic section at offset 0x1ca88 contains 27 entries: 标记 类型 名称/值 0x0000000000000001 (NEEDED) 共享库:[libc.so.6] 0x0000...原创 2019-03-18 20:24:43 · 5117 阅读 · 0 评论 -
ubuntu挂在新硬盘的方法
创建挂载目录sudo mkdir /media/worksudo chown {username} /media/worksudo chgrp {usergroup} /media/workfstab挂载配置使用命令sudo blkid或者ls -l /dev/disk/by-uuid/比如使用blkid输出:xiehaocheng@xiehaochen...原创 2019-04-29 20:30:20 · 698 阅读 · 0 评论 -
使用gdb调试动态链接库
编译选项在使用gdb进行调试之前,必须保证编译的可执行程序和想要调试的动态库编译包含了-g选项。这里还有一个坑,有时候我们虽然指定-g进行了编译,但是编译完成后又使用strip命令去除了调试信息,那么最终的程序和库也是没有调试信息的。此时也是无法进行gdb调试的。gdb调试命令当使用gdb运行时,要执行如下命令:gdb test此命令会运行一个名为test的可执行程序,如果库能够在运行...原创 2019-05-10 08:59:04 · 4257 阅读 · 0 评论 -
valgrind (一)--检测内存泄露和内存越界
简介valgrind是一套代码运行动态分析工具集,它是用于debug调试应用程序的一套工具集合,基于模块化的设计,包含一个framework核心框架层和各个moudule组件,新的功能模块可以方便的加入其中,而不影响旧的模块功能。valgrind包含如下工具组件:Memcheck这是一个memory错误检测工具,帮助开发者库快速排查内存问题。适用于C和C++。Cachegrind一个...原创 2019-05-10 15:55:50 · 4623 阅读 · 0 评论 -
嵌入式linux init系统(busybox init)
(一)System V init 首先我们来讨论PC上运行的Linux系统,它启动后从BIOS开始,进入bootloader,有bootloader加载内核,进入内核初始化。内核启动的最后一步就是创建一个pid为1的init进程。这是系统的第一个进程,它负责生产其他所有用户进程,因此它是所有其他进程的祖先。 Linux如果仅仅将内核运行起来,实际上对用户来说没有任何可操作性,所以需要init进程原创 2016-05-28 15:53:50 · 2924 阅读 · 0 评论