![](https://img-blog.csdnimg.cn/20190831100448470.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
linux
文章平均质量分 75
JiauZhang
这个作者很懒,什么都没留下…
展开
-
Linux内核源码分析之setup_arch (四)
前言Linux内核源码分析之setup_arch (三) 基本上把setup_arch主要的函数都分析了,由于距离上一篇时间比较久了,所以这里重新贴一下大致的流程图,本文主要分析的是bootmem_init函数。代码分析bootmem_init函数的结构如下:find_limits通过存储在meminfo中的内存条信息得到低端内存和高端内存的页框编号,分别放入到min、max_low、max_high中。static void __init find_limits(unsigned long *原创 2021-03-28 13:18:44 · 240 阅读 · 0 评论 -
Linux内核源码分析之setup_arch (三)
1. 前言在 Linux内核源码分析之setup_arch (二) 中介绍了当前启动阶段的内存分配函数memblock_alloc,该内存分配函数在本篇将要介绍paging_init中用于页表和内存的分配,paging_init函数大致流程如下图所示。2. paging_init2.1 build_mem_type_table该函数根据具体的CPU架构对静态定义的mem_types数组中定义的属性进行调整。2.2 prepare_page_table该函数的作用是把页目录项清零,源码大致如下。原创 2020-12-31 10:31:55 · 492 阅读 · 2 评论 -
Linux内核源码分析之setup_arch (二)
1. 概述接着上一篇《Linux内核源码分析之setup_arch (一)》继续分析,本文首先分析arm_memblock_init函数,然后分析内核启动阶段的是如何进行内存管理的。2. arm_memblock_init该函数的功能比较简单,主要就是把meminfo中记录的内存条信息添加到memblock.memory中,然后把内核镜像所在内存区域添加到memblock.reserved中,arm_mm_memblock_reserve把页表所在内存区域添加到memblock.reserved中;如原创 2020-12-08 23:41:35 · 405 阅读 · 0 评论 -
Linux内核源码分析之setup_arch (一)
1. 概述之前已经写了几篇Linux内核启动相关的文章,比如:《解压内核镜像》《调用 start_kernel》都是用汇编语言写的,这些代码的作用仅仅是把内核镜像放置到特定的位置,同时配置好C语言的运行环境,再有就是简单的把内核镜像所在区域的页表设置一下,在开启MMU之后就正式开始了C语言代码的执行,C语言代码的入口是start_kernel这个函数,本文要介绍其中的set_arch这个函数,该函数的作用是查找给定机器ID的数据结构信息、配置内存条信息、解析bootloader传递命令行参数,然后根据ma原创 2020-11-22 10:43:08 · 605 阅读 · 2 评论 -
printk流程分析
1. 概述printk 用于在终端上打印内核想要输出的信息,平常我们较多使用的打印函数是 printf,两者名字虽然只有最后一个字母不同,且都是为了在终端上显示信息,但是它们的应用场景并不相同。printk 是 linux 内核用来打印消息的,而 printf 则是用户态模式下打印消息用的,不过最终 printf 会通过系统调用的方式使用 printk 进行消息的显示。printk 的整体代码流程如下:2. 代码分析首先是 printk 函数,因为 printk 函数是支持不定参数的,所以第一步就是原创 2020-10-18 11:18:21 · 457 阅读 · 2 评论 -
原子操作原理分析
1. 概念原子操作是指不被打断的操作,即它的最小的执行单位。最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)。在 linux 中原子操作对应的数据结构为 atomic_t,定义如下:typedef struct { int counter;} atomic_t;本质上就是一个整型变量,之所以定义这么一个数据类型,是为了让原子操作函数只接受 atomic_t 类型的操作数,如果传入的不是 atomic_t 类型数据,在程序编译阶段就不会通...原创 2020-06-24 18:47:57 · 481 阅读 · 0 评论 -
自旋锁原理分析
1. 概念自旋锁的目的是在短期间内进行轻量级的锁定,解决对某项共享资源的互斥使用,在等待锁重新可用期间进行自旋,所以自旋锁不应该被持有时间过长,如果需要长时间锁定的话,推荐使用信号量。实际操作的数据结构如下:2. 获取锁最终执行的代码是体系结构相关的自旋锁实现:arch_spin_lock。3. 代码分析static inline void arch_spin_lock(arch_spinlock_t *lock){ unsigned long tmp; u32 newval;原创 2020-06-23 09:17:48 · 374 阅读 · 0 评论 -
调用 start_kernel
机器感知一个专注于SLAM、Linux、算法等相关技术文章分享的公众号步骤 1关闭中断、进入 SVC 模式ENTRY(stext) THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. THUMB( bx r9 ) @ If this is a Thumb-2 kernel, THUMB( .thumb ) @ switch to Thumb now. THUMB(1: ) setmod..原创 2020-05-25 17:33:42 · 305 阅读 · 0 评论 -
解压内核镜像
机器感知一个专注于SLAM、Linux、算法等相关技术文章分享的公众号步骤 0uboot 将 zImage 复制到内存之后,跳转到 zImage 处开始执行,首先执行的代码是arch/arm/boot/compressed/head.S 文件,首先是一些涉及不同体系结构调试相关的汇编宏定义#ifdef DEBUG#if defined(CONFIG_DEBUG_ICEDCC)#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K..原创 2020-05-09 21:40:25 · 304 阅读 · 0 评论 -
引导 ARM Linux
机器感知一个专注于SLAM、Linux、算法等相关技术文章分享的公众号引导 ARM Linux本文翻译自:https://www.kernel.org/doc/html/latest/arm/booting.html引导 ARM Linux 需要一个引导加载程序,它是一个先于内核运行的小段程序。引导加载程序被用于初始化各种设备,并最终调用 Linux 内核,同时给内核传...原创 2020-04-26 21:20:10 · 244 阅读 · 1 评论 -
Linux内核构建过程
构建内核# shell 执行如下指令make zImage全局变量srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))objtree := $(CURDIR)src := $(srctree)obj := $(objtree)VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(K...原创 2019-12-19 09:40:08 · 181 阅读 · 0 评论 -
Linux内核配置过程
内核版本linux 2.6.32.2配置内核的过程配置内核可以通过执行 make menuconfig 来进行,下面分析该命令的执行流程执行该目标%config: scripts_basic outputmakefile FORCE $(Q)mkdir -p include/linux include/config $(Q)$(MAKE) $(build)=scripts/kconf...原创 2019-12-18 09:40:16 · 202 阅读 · 1 评论 -
Linux内核最顶层文档
Linux 内核文档该文件是 Linux 内核文档树中最顶层的,会随着内核一起更新;其目的是把散乱的文档集成为一个逻辑清晰的完整版,非常欢迎改善文档,如果想做出自己的贡献,加入vger.kernel.org中的 linuxdoc 列表中许可证文件见 Linux 内核源代码Linux kernel licensing rules用户导向的文档以下手册是给那些想最优化某个系统的内核用户...原创 2019-12-12 22:21:00 · 156 阅读 · 0 评论 -
开启SSH服务
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号1. 更新源列表打开"终端窗口",输入"sudo apt-get update"-->回车-->"输入当前登录用户的管理员密码"-->回车,就可以了。2. 安装openssh-server在终端中输入: sudo apt-get install openssh-server...原创 2018-08-05 16:34:55 · 836 阅读 · 0 评论 -
SSH连接报algorithm negotiation failed错误
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号ssh client 报 algorithm negotiation failed的解决方法之一 修改sshd的配置文件 /etc/ssh/sshd_config 在配置文件中添加: Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr...原创 2018-08-05 16:31:16 · 3356 阅读 · 0 评论 -
虚拟机联网问题
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号开发环境:笔记本WIFI上网虚拟机无法上网的原因是:网络环境发生了变化,把宿主机所使用的网络(即WIFI网卡)设为共享网络即可。virtualbox对虚拟机进行设置:设置网卡2,然后使用桥接方式,启动虚拟机,等待系统一个网卡联网成功后,对另一个没有连接的进行设置,设置为手动分配IP,并把IP设置...原创 2018-08-05 16:11:49 · 157 阅读 · 0 评论 -
Windows7 + Ubuntu14.04 双系统安装详解
Windows 7 + Ubuntu 14.04最终效果Ubuntu安装步骤下载ubuntu-14.04.5-desktop-i386_163.iso(根据个人系统选择32bit或64bit)下载并安装EasyBCD2.3.exe下载并安装UltralISO以管理员身份运行文件->打开->在弹出窗口中找到ubuntu-14.04.5-deskto原创 2018-10-19 16:31:20 · 1961 阅读 · 1 评论 -
shell命令之set
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号用set命令可以设置各种shell选项或者列 出shell变量.单个选项设置常用的特性.在某些选项之后-o参数将特殊特性打开.在某些选项之后使用+o参数将关闭某些特性,不带任何参数的set命 令将显示shell的全部变量.除非遇到非法的选项,否则set总是返回ture.当shell被调用时,可以列出全部的...原创 2018-06-21 09:12:42 · 224 阅读 · 0 评论 -
shell命令之grep
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号grep参数说明:-r,递归搜索目录-n,显示匹配结果的行号-w,按单词搜索-v,实现反查效果,查找不包含指定字符串的信息-i,不区分字母的大小写-l,返回包含指定字符串的文件列表-L,返回 不包含指定字符串的文件列表-q或--quiet或--silent,不显示任何信息...原创 2018-06-21 09:44:38 · 227 阅读 · 0 评论 -
shell命令之for
在shell中最常用for in语句自动对字符串按空格遍历的特性,对多个目录遍历。example1.sh#!/bin/bashfor i in `ls`;do echo $i is file name\! ;done example2.sh #!/bin/bash list="rootfs usr data data2" f...原创 2018-06-22 22:45:08 · 232 阅读 · 0 评论 -
shell命令之test
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号1. 判断表达式 if test (表达式为真) if test !表达式为假 test 表达式1 –a 表达式2 两个表达式都为真 test 表达式1 –o 表达式2 两个表达式有一个为真2. 判断字符串 ...原创 2018-06-23 11:09:34 · 192 阅读 · 0 评论 -
Linux的常用命令
机器感知一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号1 Linux的常用命令Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。大多数命令的形式如下:command [option] [source file(s)] [target file]注意:通常在表述命令的格式时,“[]”中的内容表示可选项。用户在提示符下输入的命...原创 2018-06-16 15:38:26 · 187 阅读 · 0 评论