Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >start_kernel函数部分分析

start_kernel函数部分分析

作者头像
哆哆jarvis
发布于 2022-08-23 06:14:05
发布于 2022-08-23 06:14:05
36100
代码可运行
举报
运行总次数:0
代码可运行

根据板子里面的启动信息,cat /proc/kmsg,对着代码看。

start_kernel函数分析

1. set_task_stack_end_magic(&init_task);

抽取关键部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  //找到栈顶位置并设置个魔术字,防止堆栈 将 thread_info 的数据覆盖;
  //如果是向上生长的栈,直接通过(task_thread_info + 8K - 1)找到栈底并设置魔术字
  //内核栈大小一般为4K或者8K.
  set_task_stack_end_magic(&init_task);
    stackend = end_of_stack(tsk);
      return (unsigned long *)(task_thread_info(p) + 1);
    *stackend = STACK_END_MAGIC; // 0x57AC6E9D
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//宏定义了就是向上生长
static inline unsigned long *end_of_stack(struct task_struct *p)
{
#ifdef CONFIG_STACK_GROWSUP
  return (unsigned long *)((unsigned long)task_thread_info(p) + THREAD_SIZE) - 1;
#else
  return (unsigned long *)(task_thread_info(p) + 1);
#endif
}

(栈向下生长的情况)

(栈向上生长的情况)

2. smp_setup_processor_id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  int i;
  u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0;
  u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);

  cpu_logical_map(0) = cpu;
  for (i = 1; i < nr_cpu_ids; ++i)
    cpu_logical_map(i) = i == cpu ? 0 : i;

  /*
   * clear __my_cpu_offset on boot CPU to avoid hang caused by
   * using percpu variable early, for example, lockdep will
   * access percpu variable inside lock_release
   */
  set_my_cpu_offset(0);

  pr_info("Booting Linux on physical CPU 0x%x\n", mpidr);

先通过is_smp()函数判断是否为smp处理器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static inline bool is_smp(void)
{
#ifndef CONFIG_SMP
  return false;
#elif defined(CONFIG_SMP_ON_UP)
  extern unsigned int smp_on_up;
  return !!smp_on_up;
#else
  return true;
#endif
}

我的是imx6ull板子,不是对称多处理器,这里宏没定义,直接返回false。

所以mpidr 为0

3. local_irq_disable

暂时禁止本地中断, 设置完相关的东西后再开启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  // 禁止本地中断
  local_irq_disable
    raw_local_irq_disable
      arch_local_irq_disable

4. boot_cpu_init

初始化 Boot CPU

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  // 设置boot cpu
  boot_cpu_init
    smp_processor_id
      raw_smp_processor_id
        current_thread_info()->cpu
    set_cpu_online
    set_cpu_active
    set_cpu_present
    set_cpu_possible

5.page_address_init

初始化高端内存线性地址中永久映射的全局变量.IMX6ULL这里的宏没开,所以这里应该是空

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  page_address_init
    // page_address_htable 是个全局结构体数组, 
    for (i = 0; i < ARRAY_SIZE(page_address_htable); i++)
      INIT_LIST_HEAD(&page_address_htable[i].lh);
      spin_lock_init(&page_address_htable[i].lock);

6.pr_notice("%s", linux_banner);

linux_banner 字符串保存了 linux 版本号,编译主机,GCC 版本,编译 时间等信息。在开机过程中可以看到log

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* FIXED STRINGS! Don't touc.h! */
const char linux_banner[] =
  "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
  LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";

以下是编译生成的文件,路径在include\generated\compile.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define UTS_MACHINE "arm"
#define UTS_VERSION "#9 SMP PREEMPT Sat Dec 25 20:49:44 CST 2021"
#define LINUX_COMPILE_BY "zrc"
#define LINUX_COMPILE_HOST "zrc"
#define LINUX_COMPILER "gcc version 4.9.4 (Linaro GCC 4.9-2017.01) "

7. setup_arch

初始化体系相关的部分,实现与体系和芯片有关

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  // 初始化体系相关的部分,实现与体系和芯片有关
  setup_arch(&command_line)
    setup_processor(); // 从硬件获得体系相关的信息,并将该信息用于系统的初始化
    // __atags_pointer 指向 DTB 所在的物理地址
    mdesc = setup_machine_fdt(__atags_pointer)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 哆哆jarvis 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Qutrunk与Paddle结合实践--VQA算法示例
QuTrunk 是启科量子开发和已经开源的一款量子编程框架软件产品,它使用 Python 作为宿主语言,利用Python 的语法特性实现针对量子程序的 DSL(领域专用语言),所有支持 Python 编程的 IDE 均可安装使用 QuTrunk。QuTrunk 基于量子逻辑门、量子线路等概念提供量子编程所需的各类API。这些 API 分别由相应的模块实现,比如 QCircuit 实现量子线路功能,Qubit 实现量子比特,Qureg 实现量子寄存器,Command 对应每个量子门操作的指令, Backend 代表运行量子线路的后端模块,gate 模块实现了各类基础量子门操作。同时 QuTrunk 还可以作为其他上层量子计算应用的基础,比如:量子算法、量子可视化编程、量子机器学习等。
量子发烧友
2023/02/24
5060
Qutrunk与Paddle结合实践--VQA算法示例
下(应用篇)| 推荐几款较流行的量子算法
量子算法是量子计算机的必要软件支撑,同时量子算法的研究也是推动量子计算发展的强大动力。以下将对各个发展阶段的典型量子算法进行比较分析。
量子发烧友
2023/02/24
2.1K0
下(应用篇)| 推荐几款较流行的量子算法
量子+AI应用:量子计算与神经网络
神经网络是当下计算应用中发展最快,使用最广的机器学习算法。然而,由于传统的神经网络只能使用单个网络来存储许多算法模式,随着应用不断复杂化导致网络结构不断扩大,存储性能瓶颈已逐渐凸显。
量子发烧友
2023/02/24
1.3K0
量子+AI应用:量子计算与神经网络
量子算法与实践--变分量子态对角化算法
变分混合量子—经典算法是近期在量子计算机上有希望实现的一种候选算法。在这些算法中,量子计算机评估一个门序列所耗费的成本与经典的成本评估相比较低,速度上也会更快一些。通过量子计算机评估的门序列信息,最终也可用于经典计算机调整门序列的参数。
量子发烧友
2023/02/24
7450
量子算法与实践--变分量子态对角化算法
量子机器学习新思路——构建参数化的量子线路
人工智能的发展已经历60余年,自1956年至今人工智能发展共经历了三个发展阶段。在技术阶段上,AI发展的技术阶段可分为运算智能阶段、感知智能阶段和认知智能阶段三个层次。当前,人工智能的发展正处于第三次发展浪潮之中,处于认知智能时代的初级阶段。
量子发烧友
2023/03/08
6240
量子机器学习新思路——构建参数化的量子线路
量子线性系统算法及实践——以Cirq为例
求解线性方程组是科学计算中的一个基础问题,也可利用线性方程组构造复杂的算法,如数值计算中的插值与拟合、大数据中的线性回归、主成分分析等。而正是由于线性求解问题在学科中的基础性作用,其在科学、工程、金融、经济应用、计算机科学等领域也应用广泛,如常见的天气预报,需要通过建立并求解包含百万变量的线性方程组实现对大气中类似温度、气压、湿度等的模拟和预测;如销量预测,需要采用线性回归方式的时序预测方法进行预测。
量子发烧友
2023/03/08
1.1K0
量子线性系统算法及实践——以Cirq为例
量子计算与人工智能
量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式,它的处理效率要大大快于传统的通用计算机。那么什么是人工智能,人工智能的发展历程,以及人工智能如何跟量子计算的结合和应用。本篇文章就为大家做个简单分享。
量子发烧友
2023/02/24
1K0
量子计算与人工智能
参数化量子线路简介
参数化量子线路(Parameterized Quantum Circuit, PQC)即由含参数的量子门组成的量子线路,是进行量子机器学习的途径之一。在很多情况下,为了能与经典机器学习中神经网络进行类比,我们也经常会把参数化量子线路称为量子神经网络。本文中介绍量子-经典混合计算架构MindQuantum能够处理此类参数化量子线路,并利用量子神经网络的可逆性对该线路进行自动微分,最后通过测量得到的观测值,即可计算出观测值对于各参数的导数。
量子发烧友
2023/02/24
2.1K0
参数化量子线路简介
AI框架分析与介绍
AI 框架是 AI 算法模型设计、训练和验证的一套标准接口、特性库和工具包,集成了算法的封装、数据的调用以及计算资源的使用,同时面向开发者提供了开发界面和高效的执行平台,是现阶段 AI 算法开发的必备工具。
量子发烧友
2023/02/24
4.7K0
AI框架分析与介绍
量子近似优化算法及其应用
量子近似优化算法(QAOA)是一种经典和量子的混合算法,是一种在基于门的量子计算机上求解组合优化问题的变分方法。一般而言,组合优化的任务就是从有限的对象中寻找使成本最小化的目标对象,在实际生活中的主要应用包括降低供应链成本、车辆路径、作业分配等。
量子发烧友
2023/03/08
1.3K0
量子近似优化算法及其应用
QuTrunk使用教程之Bell Pair电路及Deutsch算法
QuTrunk是启科量子自主研发的量子编程框架。QuTrunk基于Python提供了量子编程API,对量子编程相关的基本概念做了代码层面的抽象封装和实现,如Qubit代表单个量子比特,每个量子比特默认持有一个经典比特,方便存放量子比特对测量结果。
量子发烧友
2023/02/24
3620
QuTrunk使用教程之Bell Pair电路及Deutsch算法
利用TFQ纠正量子位校准误差
TensorFlow Quantum(TFQ)是谷歌在 2020 年 3 月 9 日宣布推出一个用于量子机器学习的 Python 框架,它能够将机器学习和量子计算结合在一起。这个框架可以构造量子数据集,原型混合量子模型和经典机器学习模型,支持量子电路模拟以及训练判别与生成量子模型等操作。
量子发烧友
2023/02/24
1.2K0
利用TFQ纠正量子位校准误差
混合量子-经典体系对量子数据的分类问题
经典计算机中可以利用比特位和逻辑门进行二进制运算,在物理硬件方面,二进制运算主要通过半导体的特殊电性质实现。在量子计算机中,主要利用量子的纠缠和叠加特性通过量子比特位和量子逻辑门来实现运算。量子计算对算力的加速优势也在量子计算机不断发展中得到证实。但关于量子计算机与经典计算机的存在性问题,并非取而代之这么简单。目前,在物理硬件设备基础和量子技术的发展方面,依然无法制造出可以超越经典计算的通用量子计算机。
量子发烧友
2023/03/08
4550
混合量子-经典体系对量子数据的分类问题
量子+AI:量子计算加速机器学习
量子计算和机器学习都是当前最炙手可热的研究领域。在量子计算方面,理论和硬件的一个个突破性进展让人们看到大规模通用量子计算机的脚步越来越近。在机器学习方面,具备机器学习能力的人工智能在某些方面的能力远超人类。
量子发烧友
2023/02/24
1.4K0
量子+AI:量子计算加速机器学习
实践|QuTrunk实践之基础量子逻辑门
经典计算中,最基本的单元是比特,在经典计算中对比特的操作采用电信号的处理方式,不同的逻辑门对应相应的电信号处理方式,实现对比特的基本操作。我们可以通过不同的逻辑门组合来达到控制电路的目的。类似于经典计算,量子计算中对量子比特的操作需要操纵使用量子逻辑门使量子态发生演化,通过不同的量子逻辑门组合最终实现量子线路的控制。使用量子逻辑门,我们有意识的使量子态发生演化。
量子发烧友
2023/03/08
6440
实践|QuTrunk实践之基础量子逻辑门
量子计算与AI的颠覆性融合:从玻尔兹曼机到量子神经网络的技术跃迁
各位科技迷小伙伴们!在科技圈,量子计算和 AI 就像两颗超级耀眼的巨星。量子计算凭借微观世界的神奇特性,算力强到超乎想象;AI 则在数据处理和学习领域,如同拥有超能力一般。当这二者 “牵手”,一场科技界的 “风暴” 就此掀起!今天,咱们就踏上探索之旅,深挖从玻尔兹曼机到量子神经网络的技术跃迁之路!
小白的大数据之旅
2025/04/07
2200
量子计算与AI的颠覆性融合:从玻尔兹曼机到量子神经网络的技术跃迁
机器学习——量子机器学习
量子计算和机器学习的结合为计算科学带来了前所未有的前景。量子机器学习(QML)正在迅速发展,目标是利用量子计算的优势来处理传统计算机无法高效解决的问题。本文将深入探讨量子机器学习的基本概念、量子计算的关键技术、具体的量子算法,以及如何结合现有的机器学习方法,以推动对未来量子优势的探索。
hope kc
2024/10/14
3430
量子算法与实践——Grover算法
量子计算机的算力可体现为量子计算机可实现并行计算, Grover算法(Quantum Search Algorithm)是量子计算领域的主要算法之一。Grover算法是由Grover于1996年提出的平方根加速的随机数据库量子搜索算法,旨在利用量子计算机进行比经典计算机更快的数据搜索。在数据库足够混乱且没有具体的数据结构限定的条件下,Grover算法可以快速解决从N个未分类的客体中寻找出某个特定个体的问题。除搜索时间远短于经典计算外,其强大之处还在于Grover算法的公式可适用于很多问题,比如:密码学、矩阵和图形问题、优化以及量子机器学习等。本文将从Grover算法的实现原理、应用与实践等方面介绍Grover算法。
薛大叔的量子猫
2022/11/07
4.8K0
一文概览量子机器学习!
【导读】大家好,我是泳鱼。一个乐于探索和分享AI知识的码农!熟话说,“遇事不决 量子力学!”。当两股科技顶流——量子计算 + 人工智能 相遇,会产生怎么样的火花呢?
算法进阶
2023/08/28
1.1K0
一文概览量子机器学习!
实践|量子编程初试
导读 QuBranch与QuTrunk项目是启科量子发起的量子编程软件工具开发项目。QuBranch是以VS Code庞大的生态群为基础,专为量子编程开发的一种编程工具,支持Windows、Mac、Linux等操作系统和编辑、调试、量子模拟执行等功能,可为量子编程提供集成开发环境。QuTrunk是启科量子自主研发的量子编程框架,基于python提供量子编程API,对量子编程涉及到的基本概念做了代码层面的抽象封装和实现,主要为量子编程提供底层服务。为加速量子软件开发与实践进程,本文将简要介绍QuBranch与QuTrunk,并通过软件已开发功能进行量子算法运行演示。
量子发烧友
2023/02/24
6550
实践|量子编程初试
推荐阅读
相关推荐
Qutrunk与Paddle结合实践--VQA算法示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验