LINUX-KERNEL
存放整个linux的内核学习过程,编译方法,原理
思途积跬
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
armbian源码解析
编译系统从compile.sh开始,所以从这个地方开始1.判断代码路径是否合法,主要是判断是否包含空格。SRC="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"# check for whitespace in ${SRC} and exit for safety reasonsgrep -q "[[:space:]]" <<<"${SRC}" && { echo "\"${SRC}\" contains whitesp原创 2020-09-09 14:28:22 · 1319 阅读 · 0 评论 -
LINUX驱动学习之3-硬件知识准备
一、存储器NOR Flash和CPU的接口属于典型的类SRAM接口,因此不需要额外的控制电路,CPU就可以和NOR FLASH通信,并且数据的交换,修改,可以直接在NOR FLASH上进行。RAM也可再分为静态RAM(SRAM)和动态RAM(DRAM)。DRAM以电荷形式进行存储,数据存储在电容器中。由于电容器会因漏电而出现电荷丢失,所以DRAM器件需要定期刷新。SRAM是静态的,只要供电它...原创 2020-05-04 10:37:41 · 263 阅读 · 0 评论 -
LINUX驱动学习之4-LINUX内核和内核编程
说到内核,需要提两个重要的内容1.GNU计划:开发了优秀的编译器GCC和调试器GDB等基础设施2.POSIX标准:可移植的操作系统接口。一、内核各版本主要特点二、版本的命名版本有两个小数点,三部分数字,如LINUX 2.6.35, 数字不停的增大,周期2-3个月三、版本变更的详细信息在这个网站可以查到http://kernelnewbies.org/LinuxVersions。四...原创 2020-05-03 19:53:57 · 583 阅读 · 0 评论 -
LINUX驱动学习之2-Hello world驱动--点亮LED--感性认识,无实操
操作GPIO的本质:实际上就是操作IC的“配置寄存器”和“数据寄存器”。配置寄存器:配置GPIO口输入输出模式,推挽输出还是开漏,上下拉配置数据寄存器:配置GPIO的输出电平高低,或读取输入电平高低一、无操作系统的hello world对于无操作系统,通常代码如下1#define reg_gpio_ctrl GPIO_REG_CTRL2#define reg_gpio_data GP...原创 2020-05-03 13:52:45 · 181 阅读 · 0 评论 -
动态追踪技术:trace your kernel Functions!
摘自https://zhuanlan.zhihu.com/p/27190018动态追踪技术:trace your kernel Functions!RiboseYimRiboseYimEngineer & Writer28 人赞同了该文章Ftrace是一个设计用来帮助开发者和设计者监视内核的追踪器,可用于调试或分析延迟以及性能问题。ftrace令人印象最深刻的是作为一个func...转载 2019-11-04 11:21:49 · 780 阅读 · 0 评论 -
linux内核学习-信号-信号及信号处理
信号是一种软件终端,它提供一种处理异步事件的方法,也是进程同步的唯一方法。根据POSIX标准扩展的信号机制,不仅可以通知事件,还能传递数据。信号来源:1.硬件方式用户按了某些键,如ctrl+c,产生一个SIGINT信号硬件异常产生信号:除数为0,无效存储访问,2.软件方式kill命令sigqueue函数某些软件发送的,如定时器查看信号种类使用明星kill -l查看系统支...原创 2019-11-06 11:51:05 · 203 阅读 · 0 评论 -
linux内核学习-线程-线程控制
线程:可以理解为轻量级的CPU执行单元。其必须依托在进程内部。同一个进程里面的多个线程是共享进程的资源的。但是线程也有自己的私有数据,包括:线程号(thread ID)寄存器堆栈信号掩码优先级线程私有存储空间线程的头文件为pthread.h 链接库为libpthread.a一、创建线程线程常用函数函数说明pthread_t pthread_sel...原创 2019-11-02 16:53:31 · 217 阅读 · 0 评论 -
linux内核学习-驱动-I2C
先来看看linux内核的I2C驱动的文件在/drivers/i2c目录下。一、先看看Makefile文件## Makefile for the i2c core.#obj-$(CONFIG_I2C_BOARDINFO) += i2c-boardinfo.oobj-$(CONFIG_I2C) += i2c-core.oobj-$(CONFIG_I2C_SMBUS) += i2c...原创 2019-11-02 00:39:37 · 638 阅读 · 0 评论 -
linux内核学习-编译架构-2.链接文件lds
上一篇文章说了make命令是怎么根据make menuconfig的配置编译出.o文件的。根据程序编译的过程“检查语法,编译,最后链接”。最后需要有一个文件用来组织这些.o文件。这里最重要的一个就是程序的入口地址。一、找到vmlinux.lds文件根据目标系统的不同的,vmlinux.lds的文件也会不同。比如,arm架构的在/arch/arm/kernel/ vmlinux.lds打开这个...原创 2019-11-01 22:47:55 · 542 阅读 · 0 评论 -
linux内核学习-进程-进程控制
进程标识每一个linux都有唯一一个进程标识,且为非负数。进程的其他参数可以通过相应的函数获得,函数声明在头文件“unistd.h”中。函数声明功能pid_t getpid(id)获得进程IDpid_t getppid(id)获得父进程IDpid_t getuid(id)获得进程实际用户IDpid_t getcuid(id)获得进程有效用户ID...原创 2019-11-01 15:06:42 · 541 阅读 · 0 评论 -
linux内核学习-编译架构-2.内核的Makefile文件
有关makefile语法的内容,可以Google下”“跟我一起学makefile”。讲的挺好的,第一次看可能看的一塌糊涂。看多几次就好了。内核的makfile在源码目录Documentation\kbuild\makefiles.txt也有介绍。一、内核的Makefile涉及到5部分的内容1.Makefile, 位于kernel根目录, 顶层Makefile. 最终目的是编译内核, 生成 v...原创 2019-10-31 17:46:16 · 131 阅读 · 0 评论 -
linux内核学习-编译架构-1.编译过程简单说说和kconfig文件介绍
随着学习的深入,有必要了解下编译的过程。寻找到一个出路。前言这篇文章知道C语言的“宏语句”的含义。一、编译过程简单说说从内核的编译过程,我们知道:1.首先要有一个.config文件(这个文件通过Make menuconfig产生)。2.make命令根据.config和Makefile文件,最终生成vmlilnux这个内核文件。3.vmlinux压缩成zImage。二、.config...原创 2019-10-31 17:36:41 · 698 阅读 · 0 评论 -
linux内核学习-环境搭建和使用-3.编译linux内核
解压内核#tar jxvf linux-2.6.35.7-gec-v3.0.tar.bz2#cd linux-2.6.35.7-gec-v3.0我们做了很多配置文件,可根据您的硬件需求来决定执行哪条命令(注意 config 前的“.”)#cp GEC210_7INCH_CONFIG-TSC2007 .config ===>7 寸电阻屏#cp GEC210_1024X768_CONF...原创 2019-10-31 11:09:41 · 502 阅读 · 0 评论 -
linux内核学习线路规划
汇总设备类|—视频——机器学习、人工智能|----音频——语音识别|—网络——主要流程,调优|—存储——调优|—其他设备总线类|——USB总线|——PCI总线框架类|——kernel|——uboot|——ALSA|——netfilter技能调试技术英语阅读能力操作系统原理...原创 2019-10-31 10:27:07 · 286 阅读 · 0 评论 -
linux内核学习-调试-字符界面开发环境搭建-vim+ctags+taglist
字符界面还是挺强大的,不过就是感觉效率有点低,可能是我还没有用惯的缘故。不管怎么滴,都要知道个大概。1.安装sudo apt install vim ctagsctags在这里能下载http://ctags.sourceforge.net/安装taglist$ cd ~$ sudo mkdir .vim$ sudo mkdir .vim/plugin$ cd .vim$ su...原创 2019-10-29 13:53:31 · 144 阅读 · 0 评论 -
linux内核学习-调试-coredump的使用
coredump是在程序崩溃后,由linux系统自动收集程序的内存信息并保存到文件的一种机制。如下面所示的提示。造成这个错误的原因有很多,在这边 博文 有细说。本文主要讲coredump的使用1.打开coredump默认情况下,coredump是没有开启的,通过命令ulimt -a查看图中,core file size为0,ulimit -c unlimited 上面的命令表示在...原创 2019-10-29 12:59:49 · 1033 阅读 · 0 评论 -
linux内核学习-内存-分析程序的内存地址分配
前言学习过linux后,知道linux程序内存结构可以分成五个区块。分别是“代码段”,“数据段“,”BSS段”,堆(head)和栈(stack)。他们分别的功能是代码段: 存放程序编译后的机器代码,它是一块只读区。数据段: 数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配[1]的变量和全局变量。BSS段[2]: BSS段包含了程序中未初始化的全局变量,在内存中 bs...原创 2019-10-29 09:06:38 · 414 阅读 · 0 评论 -
堆和栈的区别
数据结构解读看堆栈堆栈都数据数据结构的范畴,在很多的数据结构书里面,会以“堆栈”一词来形容这种数据结构。但是从数据结构的角度看。“堆”和“栈”是两个不一样的东西。栈(stack):简单的说就是“先进后出”。详细的可以看“数据结构”相关数据。堆(head):也称为优先队列(priority queue),和“队列类似”,从堆顶取元素,在堆底加入元素。关于堆,这个博文写的挺好的,堆栈在功能...原创 2019-10-28 18:35:24 · 154 阅读 · 0 评论 -
linux内核学习-环境搭建和使用-2.开发环境搭建
接之前一篇文章,如下继续搭建开发环境1.将光盘目录中的"LINUX平台工具的所有文件拷贝到虚拟机里面"。2.解压GCC编译工具,这里编译kernel和uboot的GCC版本是不一样的。sudo tar jxvf arm-linux-gnueabi-4.5.1.tar.bz2 -C /vim ~/.bashrc在文件中加入:export PATH=/usr/local/arm/4.5.1...原创 2019-10-26 14:52:43 · 446 阅读 · 0 评论 -
linux内核学习-环境搭建和使用-1.开发板烧写
自己玩嵌入式linux已经很久了,但是总感觉不够系统,最近打算重新梳理一遍,发现有很多工具已经过时不能使用了。我的开发板是GEC210。**SD卡烧录方法**1.SD卡分区对SD卡重新分区,目的是空出一个自由空间用于存放引导程序。使用diskgen,先创建主分区10M,然后剩下的空间在创建一个主分区。最后将10M的那个分区删除,使得这10M空间变成自由空间。保存退出。2.烧录引导...原创 2019-10-26 14:33:53 · 667 阅读 · 0 评论 -
linux内核学习-进程-进程状态
操作系统原理介绍的进程状态:TASK_RUNNING”:运行“TASK_INTERRUPTIBLE”:任务可中断“TASK_UNINTERRUPTIBLE”:任务不可中断“__TASK_STOPPED”:停止“__TASK_TRACED”:源码中,进程的状态定义位于./include/linux/sched.h中:#define TASK_RUNNING 0#define T...原创 2019-10-25 16:10:33 · 639 阅读 · 0 评论 -
linux文件系统学习计划
最近将目标定位在文件系统的学习上,看的东西也非常多,网上也有很多好文,最重要的文件系统虽然独立,但是复杂度还是挺高。所以我先在做个简要的计划,以方便自己回溯学习。也希望各位大神可以提点一下。因为是初学,难免会有错误,不吝赐教。当前具备知识当前研究了FAT32文件系统,对其原理有较深的认识。IO系统压力测试方法和状态查看—使用FIO和IOSTAT两个命令文件系统总体框架 “硬件设备”–“I...原创 2019-10-24 17:05:38 · 127 阅读 · 0 评论 -
iostat命令
转载自https://www.cnblogs.com/peida/archive/2012/12/28/2837345.html每天一个linux命令(47):iostat命令Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,i...转载 2019-10-24 16:24:01 · 141 阅读 · 0 评论 -
linux主机压力测试工具--简记篇
CPU压力测试内存压力测试2.Linux中测内存读写速度可以使用以下命令: dd if=/dev/zero of=/dev/null bs=1M count=1024不过我觉得这个测试结果不对,原因我还未知。因为按照我的电脑是DDR4 3200的内存条,最大带宽25.6 GB/s。不可能超越这个数值。网络压力测试使用工具IperfIO测试1、利用dd来进行测试:time dd i...原创 2019-10-24 16:02:00 · 785 阅读 · 0 评论 -
Linux IO压力测试工具FIO
FIO是一个命令行IO设备压力测试工具,具有较多的参数,命令有点长,但是也是优点之一,能控制的内容就很多。FIO托管在github项目主页:https://github.com/axboe/fio安装ubuntu系统sudo apt install fio -ycentos系统yum install fio参数说明举例命令sudo fio -filename=/dev/sdb...原创 2019-10-24 15:16:59 · 1271 阅读 · 0 评论 -
ubuntu安装4.5内核
最近想研究内核,第一步先拿到源码并编译安装到我的系统中去1.下载源码和补丁wget http://mirrors.aliyun.com/linux-kernel/v4.x/linux-4.5.tar.xzwget http://mirrors.aliyun.com/linux-kernel/v4.x/patch-4.5.xz2.安装环境准备apt-get install kernel-...原创 2019-10-24 12:11:43 · 456 阅读 · 0 评论 -
FAT32文件系统研究2-文件存储和定位过程
定位数据区DATA位置1.系统通过该分区的分区表信息,定位到DBR扇区,这里要说一下分区表所处的位置,如下图所示。读取DBR的0E-0FH偏移处,得到DBR保留扇区数,读取DBR每一个FAT表的扇区数及FAT表的个数DBR + FAT表个数 * FAT表扇区数,即可以获得数据区的开始。数据区内容FAT32文件系统数据区的内容主要由三部分组成:根目录,子目录和文件内容。在数据区中是以...原创 2019-10-18 11:37:31 · 603 阅读 · 0 评论 -
FAT32文件系统研究2-FAT表结构
FAT表作用FAT文件系统将空间按族为单位划分为一个个格子。FAT即文件系统分配表,它是记录FAT文件系统空间使用情况的一张表。FAT记录了格子的使用情况,每个文件所处格子的位置等信息。同时FAT表可以存储每个格子的状态。FAT详细信息1.FAT1跟在DBR之后,FAT2跟在FAT1之后中间没有空的扇区。现在来看这个也是一个弊端。一般磁盘物理损坏都是一大片连续的损坏的,因此很可能FAT1...原创 2019-10-18 10:56:11 · 2476 阅读 · 0 评论 -
FAT32文件系统研究1-FAT文件系统结构
在FAT32之前还有FAT12,FAT16等文件系统,他们都是位数不一样,但是已经很少用了,所以这里写的都是FAT32系统。1.FAT32优缺点优点:1.简单2.读取快速(这里的快速是有条件的,指文件数量不多,磁盘不大的情况下。)缺点:⒈太浪费磁盘空间⒉磁盘利用效率低⒊文件存储受限制⒋不支持长文件名,只能支持8个字符。⒌安全性较差**2.文件系统结构FAT32文件系统由D...原创 2019-10-18 10:25:21 · 1447 阅读 · 0 评论 -
FAT32文件系统研究1-winhex工具的使用
为了能详细看到文件系统的内部结构和各个字段,需要有一种工具,可以直接读取到某存储介质的底层信息。而winHEX这个工具就非常强大和实用了。按照很简单,安装包一直下一步就行了。先来一张大图预览一下。此工具最大的亮点:1.可以查看某个文件,分区,设备的所有数据,并会智能的跳转到数据的起始位置2.有ASCII和HEX两种格式显示3.界面清爽直观4.能查看内存数据1.查看磁盘的数据-比如...原创 2019-10-17 17:06:12 · 975 阅读 · 0 评论 -
Linux U盘分区和文件系统识别和挂载
对U盘的操作和硬盘的操作是一样的。用fdisk分区,用mkfs格式化就行。这里不做展开。以下简单的记录查看相关的指令,以备以后方便查阅。插入U盘,查看是否识别到U盘,lsusb,看到第二行就是我的U盘,是安国(Alcor)的IC, 使用lsblk可以查看到当前的U盘分区情况,如下图,sdc就是我的U盘,在下面我分了4个分区,并格式化为不同的文件系统。 有意思的现象。如果格式化为fat的文件...原创 2019-10-12 09:12:15 · 828 阅读 · 0 评论 -
KVM创建虚拟机,文件无法访问错误permission denied
在创建虚拟机时候,出现如下错误:KVM cannot access storage file (as uid:107, gid:107)permission denied解决方法修改文件 /etc/libvirt/qemu.conf ,取消 user/group to work as root.的注释,内容如下:Some examples of valid values are:us...原创 2019-07-25 12:07:24 · 4818 阅读 · 1 评论