Linux kernel 相关笔记及转抄

从start_kernel到init进程启动 《Linux内核分析》笔记 从start_kernel到init进程启动 《Linux内核分析》笔记GDB的使用在进入GDB调试前,首先掌握GDB最常用的命令,以方便完成跟踪。 b[reak] linenumber:加断点 s[tep]:单步进入 n[ext]:单步跳过 c[ontinue]:继续执行 r[un]:运行至结束或者崩溃 q[uit]:退出 info:查看已设置的断点和观察点 watch:设置观察点 其他有用的命令 阅读详情
BootLoader

PPC中与调用C函数时,第一个参数用的是r3寄存器的值。

BootLoader

昨天读PPC的Head.S在源文件的带领下跳来跳去跳到了C文件,突然发现怎么“没有初始化内存就对就是直接付值了”,这样和传统不一样呀。

晚上睡觉前突然明白了一点,这些东西之前还有个BootLoader,这些工作是它在做的。

转自http://my.donews.com/lerosua/

更详细参考Kernelnewbies

为啥内核里有这么多 do{ }while(0) 的宏啊?一开始我也好不明白。感觉不出用了会有什么效果。不过明白之后就知道它的好处了。好处就在于多语句的宏。

#define FOO(x)	print(”arg is %sn”,x);do_something(x);

在代码中使用:

if(2==blah)
	FOO(blah);

预编译展开后:

if(2==blah)
	print(”arg is %sn”,blah);
do_something(blah);

看到了吧,do_something函数已经脱离了if语句的控制了。这可不是我们想要的。使用do{}while(0);就万无一失了。

if (2== blah)
  do {
	printf(”arg is %sn”, blah);
	do_something(blah);
  } while (0);

当然你也可以使用下面这种形式:

#define exch(x,y) { int tmp; tmp=x; x=y; y=tmp; }

但是它在if-else语句中会出现问题。如:
if (x > y)
	exch(x,y);          // Branch 1
else
	do_something();     // Branch 2

展开后:

if (x > y) {                // Single-branch if-statement!!! 
	int tmp;            // The one and only branch consists
	tmp = x;            // of the block.
	x = y;
	y = tmp;v};                           // empty statementelse          

 // ERROR!!!   “parse error before else”do_something();

看到了吧,else成了语法错误了。使用do{}while(0)就不会有这个问题了。

if (x > y)
do {
	int tmp;
	tmp = x;
	x = y;
	y = tmp;
} while(0);
else
	do_something();

嗯,现在明白之后,自己的代码也记得用啊! 

Linux kernel pm之我理解 近期搜了很多有关Linux PM的相关资料,但是总感觉叙述晦涩难懂,一来是由于对kernel的理解还未到高度,二来确实手头事情太多,没有办法沉下心来阅读code,今天晚上偷了个闲,仔细读了一遍有关pm的技术文档与source code,颇有心得,记于此。 开始理解一下Linux PM的一些基本概念, sleep, hibernate 两个概念,根据文档上说,sleep是 suspend 阅读详情

相关推荐

Android 筆記-Linux Kernel SMP (Symmetric Multi-Processors) 開機流程解析 Part(2) Linux Kernel SMP zImage到st

Android 筆記-Linux Kernel SMP  (Symmetric Multi-Processors) 開機流程解析 Part(2) Linux Kernel SMP  zImage到start_kernel流程. hlchou@mail2000.com.tw by loda. Loda's Blog App BizOrz Android/Linux

軟體勞工. 1万+

Linux kernel

个人理解BSP(板级支持包)是Bootloader,Kernel 和文件系统加起来的统称。 Linux和Unix中任何东西都是文件。目录是文件,文件是文件,设备也是文件。设备通常被当作节点,但仍然是文件。 在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环...

qq_15063463的博客 1220

Linux Kernel 排程機制介紹

Linux Kernel 排程機制介紹 hlchou@mail2000.com.tw by loda. Android/Linux Source Code Tags App BizOrz  BizOrz.COM  BizOrz Blog http://loda.hala01.com/oldarticles/ 多核心架構儼然是目前智

軟體勞工. 1万+

Linux内核Kernel启动过程

减少存储空间: 压缩内核映像可以显著减少其在存储设备上的占用空间。这对嵌入式系统、存储资源有限的设备以及需要快速分发和更新内核的环境尤其重要加快加载速度: 压缩文件占用的空间更小,这意味着启动加载程序从磁盘读取文件到内存中的时间会更短。虽然解压缩内核映像需要一些时间,但现代处理器的解压缩速度非常快,通常解压缩的时间比从存储设备读取更多数据的时间要少。这会整体上加快启动过程。提高传输效率: 在网络上传输内核映像时,压缩文件可以显著减少带宽使用量。这对于需要远程更新内核的系统(OTA)非常有利。

weixin_60669486的博客 3546

Android 筆記-Linux Kernel SMP (Symmetric Multi-Processors) 開機流程解析 Part(4) Linux 多核心啟動流程-kthreadd 與相關的核

Android 筆記-LinuxKernel SMP (Symmetric Multi-Processors) 開機流程解析 Part(4)Linux 多核心啟動流程-kthreadd與相關的核心模組 by  loda hlchou@mail2000.com.tw Loda's Blog App BizOrz Android/Linux Source Code T

軟體勞工. 1万+

Linux内核相关信息杂谈笔记

是一个用于定义读写锁(rwlock)的宏。读写锁是一种特殊的锁机制,允许多个读者同时访问共享资源,但只允许一个写者访问。这有助于提高并发性能,因为多个线程可以同时读取数据,但写操作需要独占性。// 读者加锁// 执行读操作// 读者解锁// 写者加锁// 执行写操作// 写者解锁代码中,定义了一个名为my_rwlock的读写锁,并在中展示了如何使用这个读写锁。读者使用read_lock和加锁和解锁,而写者使用write_lock和。

qq_26105397的博客 1391

Linux kernel Panic 相关知识

1. Linux Kernel Panic的产生的原因 panic是英文中是惊慌的意思,Linux Kernel panic正如其名,linux kernel不知道如何走了,它会尽可能把它此时能获取的全部信息都打印出来。 有两种主要类型kernel panic,后面会对这两类panic做详细说明: 1.hard panic(也就是Aieee信息输出) 2.soft p...

379

Yocto系列讲解[理论篇]31 - Linux kernel相关的任务

Linux 内核相关任务do_kernel_menuconfig任务do_compile_kernelmodules

fulinux的博客 2567

老表带你学Linux kernel pwn 入门(一)

不加任何保护机制的内核栈溢出提权

weixin_43889007的博客 4140

【机器学习】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

anaconda安装成功以后,jupyter notebook可以出现打开的路径,能够手动复制粘贴地址路径打开,却不能自动跳转到网页。解决的办法是在配置文件中加入指定的浏览器配置信息。

weixin_43416960的博客 4万+

【HCIA学习记录】WLAN配置实验

HCIA-WLAN

寸先生的AI道路 3874

Linux Kernel 5

本节内容包括进程与线程的基本概念、上下文切换、阻塞与唤醒机制、进程上下文等。

程子鱼 1878

Altium Designer铺铜陷阱:为什么你的死铜总是清除不干净?

本文深入探讨Altium Designer中铺铜操作导致死铜无法清除的常见问题,分析死铜形成的五大诱因,并提供高级参数优化和网络连接性验证技巧。通过调整边界计算精度和泪滴算法设置,有效解决死铜残留问题,提升PCB设计质量与制造良率。

weixin_29169505的博客 359

Linux Kernel系列一:开篇和Kernel启动概要

前言 最近几个月将Linux Kernel的大概研究了一下,下面需要进行深入详细的分析。主要将以S3C2440的一块开发板为硬件实体。大概包括如下内容: 1 bootloader分析,以uboot为主,结合具体开发板的情况。我的目标是解释清楚uboot的工作原理(说实话,分析过程中不太想被硬件绑架,但是需要以一个实际的例子 来做分析) 2 kernel部分,这就很多内容了。打算从kerne...

jandroid 1176

从FP16到FP8:我是如何让Stable Diffusion 3.5提速40%而不丢画质的

本文分享了StableDiffusion模型优化的实战经验。通过FP8精度转换、分层处理敏感模块,实现显存占用降低35%、推理速度提升40%。文章详细介绍了提升画质的五大技巧、本地/云端/移动端部署方案,以及二次元模型定制等垂直领域应用。同时总结了硬件兼容性、数据质量等七大常见陷阱,并强调持续监控和伦理考量。作者指出未来应关注MoE架构、注意力机制优化等方向,认为技术优化是持续追求性能与质量平衡的过程。

达则兼济天下 1186

基于Godot 4的战术RPG开发:模块化架构与核心系统实现

在游戏开发领域,模块化架构和回合制战斗系统是构建复杂策略游戏的基础。模块化设计通过关注点分离,将游戏逻辑分解为独立、可复用的组件,如数据模型、功能模块和场景,从而提升代码的可维护性和扩展性。回合制战斗系统则依赖于清晰的状态机循环,管理从单位选择、行动决策到伤害结算的完整流程,这是策略游戏体验的核心。这些技术为独立开发者提供了高效起点,能快速验证游戏原型。本文聚焦于一个专为Godot 4引擎设计的开源战术RPG模板,它正是运用了模块化架构和回合制状态机,实现了网格移动、相机控制和基础AI等核心功能。该模板通过

weixin_27021789的博客 615

Linux学习笔记(四):Linux启动从kernel_init到kernel_execve切换到用户态init进程

在完成这些基础初始化后,start_kernel()会调用rest_init()函数进行最后的启动准备。在Linux内核启动过程中,当进入C语言执行阶段后,系统会调用start_kernel()函数进行核心初始化。这三种方式按照优先级依次尝试,只有当高优先级方式不可行时才会尝试下一级方式,最终确保系统总能启动一个用户空间进程。这些进程的创建标志着内核从初始化阶段转入正常运行阶段,开始提供完整的操作系统服务。

2402_87288810的博客 912

【微服务】SpringBoot 整合 FastExcel 实现导入导出操作详解

SpringBoot 整合 FastExcel 实现导入导出操作详解

congge 4234

Linux kernel 源码下载与源码在线阅读地址及其相关资源网站

Linux内核源码的下载地址和在线阅读方式有多种,下面是一些与之相关的网址。同时也包含一些与kernel相关的一些资源网站,供大家参考学习!

代码背包客的博客 4159

117、HDR多帧融合算法:曝光序列、运动鬼影消除与合成权重的高效实现

HDR多帧融合算法实战经验总结 本文分享了HDR多帧融合算法在实际应用中的关键技术和优化经验。主要内容包括: 曝光序列设计:强调动态调整曝光时间比、帧间间隔和拍摄顺序的重要性,特别指出短-中-长的拍摄顺序优势。 运动鬼影消除:比较了三种运动检测方法,推荐梯度域检测方案,并强调在RAW域进行检测的必要性。 合成权重设计:提出基于高斯型权重函数的多因素考量方法,包括基础权重、运动权重和噪声权重的综合处理策略。 高效实现方案:提供NEON指令集加速的具体代码示例,包括梯度计算、权重查表和融合处理等关键步骤。 实用

zzfmlxs的博客 65

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

Linux kernel bootsect

本文的目的,在于将linuxkernel的boot部分做一个介绍,因为笔者觉得很少有这样的文章来介绍一个操作系统最最开始的一步----把kernel本身载入至内存中,同时进行一些 机器相关(machinedependent)的初始化工作,由于linux刚好使用的是大家最熟悉的386,486系列PC,所以在说明其程序流程时,也刚好可以对其相关的PC硬体架构做探讨,可以说是一举两得。不过,我必须假设读

nodeathphoenix的专栏 1032

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Linux kernel启动参数

在Linux中,给kernel传递参数以控制其行为总共有三种方法: 1.build kernel之时的各个configuration选项。 2.当kernel启动之时,可以参数在kernel被GRUB或LILO等启动程序调用之时传递给kernel。 3.在kernel运行时,修改/proc或/sys目录下的文件。 这里我简单讲的就是第二种方式了,kernel在grub中配置

uyiwfn的专栏 3287

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Arm linux kernel 启动之start_kernel (一)

      了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了。start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝辄止的描述一下函数的功能,从而对kernel启动的过程有一个比较直观的了解。很多函数真正理解需要对linux相关体系有很深的了解,暂时没有时间深入,留待以后了。       说实话启动的代码看到现在唯一的感觉就是kernel的全局变量实在太多了,要了解一个过程跟踪一个变量的值的变化相当痛苦啊,不过耐

醉月 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux kernel Namespace源码分析

学习一下linux kernel namespace的代码还是很有必要的,让你对docker容器的namespace隔离有更深的认识。

WaltonWang's Blog 1万+

Linux系统移植篇(七)Linux 内核kernel 启动流程

Linux系统移植篇(七)Linux 内核kernel 启动流程

你要拥有一个你喜欢并且热爱的人生 1363
上一篇: GDB调试精粹及使用实例
下一篇: 转载:软件分层的优缺点
bjay
博客等级 码龄25年 3粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值