Linux芯片级移植与底层驱动(基于3.7.4内核)SMP多核启动以及CPU热插拔驱动

在Linux系统中,对于多核的ARM芯片而言,Bootrom代码中,CPU0会率先起来,引导Bootloader和Linux内核执行,而其他的核则在上电时Bootrom一般将自身置于WFI或者WFE状态,并等待CPU0给其发CPU核间中断(IPI)或事件(一般透过SEV指令)唤醒之。一个典型的启动过程如下图:

被CPU0唤醒的CPUn可以在运行过程中进行热插拔。譬如运行如下命令即可卸载CPU1并且将CPU1上的任务全部迁移到其他CPU:

# echo 0 > /sys/devices/system/cpu/cpu1/online

同样地,运行如下命令可以再次启动CPU1:

# echo 1 > /sys/devices/system/cpu/cpu1/online

之后CPU1会主动参与系统中各个CPU之间要运行任务的负载均衡工作。

CPU0唤醒其他 CPU的动作在内核中被封装为一个smp_operations的结构体,该结构体的成员如下:

83struct smp_operations {

84#ifdef CONFIG_SMP

85        /*

86         * Setup the set of possible CPUs (via set_cpu_possible)

87         */

88        void (*smp_init_cpus)(void);

89        /*

90         * Initialize cpu_possible map, and enable coherency

91         */

92        void (*smp_prepare_cpus)(unsigned int max_cpus);

93

94        /*

95         * Perform platform specific initialisation of the specified CPU.

96         */

97        void (*smp_secondary_init)(unsigned int cpu);

98        /*

99         * Boot a secondary CPU, and assign it the specified idle task.

100         * This also gives us the initial stack to use for this CPU.

101         */

102        int  (*smp_boot_secondary)(unsigned int cpu, struct task_struct *idle);

103#ifdef CONFIG_HOTPLUG_CPU

104        int  (*cpu_kill)(unsigned int cpu);

105        void (*cpu_die)(unsigned int cpu);

106        int  (*cpu_disable)(unsigned int cpu);

107#endif

108#endif

109};

时间: 2024-11-03 22:34:23

Linux芯片级移植与底层驱动(基于3.7.4内核)SMP多核启动以及CPU热插拔驱动的相关文章

Linux芯片级移植与底层驱动(基于3.7.4内核) 内核节拍

1.SoC Linux底层驱动的组成和现状 为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍.中断控制器.SMP启动.CPU hotplug以及底层的GPIO.clock.pinctrl和DMA硬件的封装等.定时器节拍.中断控制器.SMP启动和CPU hotplug这几部分相对来说没有像早期GPIO.clock.pinctrl和DMA的实现那么杂乱,基本上有个固定的套路.定时器节拍为Linux基于时间片的调度机制以及内核和用户空间的定时器提供支撑,中断控制器

Linux芯片级移植与底层驱动(基于3.7.4内核) 中断控制器

3.中断控制器驱动 在Linux内核中,各个设备驱动可以简单地调用request_irq().enable_irq().disable_irq().local_irq_disable().local_irq_enable()等通用API完成中断申请.使能.禁止等功能.在将Linux移植到新的SoC时,芯片供应商需要提供该部分API的底层支持. local_irq_disable().local_irq_enable()的实现与具体中断控制器无关,对于ARMv6以上的体系架构而言,是直接调用CPS

请问在可穿戴设备的芯片固件开发中底层驱动开发与上层应用开发的区别是什么?

问题描述 请问在可穿戴设备的芯片固件开发中底层驱动开发与上层应用开发的区别是什么? 请问可穿戴设备的芯片固件开发中底层驱动开发与上层应用开发的区别是什么? 解决方案 固件底层驱动是面向硬件驱动,给上层提供调用接口,尽量与业务无关. 上层应用开发面向业务逻辑,使用底层驱动提供的接口,尽量与硬件无关

关于软件、硬件、及芯片级防火墙

  如果从防火墙的软.硬件形式来分的话,防火墙可以分为软件防火墙和硬件防火墙以及芯片级防火墙. 第一种:软件防火墙 软件防火墙运行于特定的计算机上,它需要客户预先安装好的计算机操作系统的支持,一般来说这台计算机就是整个网络的网关.俗称"个人防火墙".软件防火墙就像其它的软件产品一样需要先在计算机上安装并做好配置才可以使用.防火墙厂商中做网络版软件防火墙最出名的莫过于Checkpoint.使用这类防火墙,需要网管对所工作的操作系统平台比较熟悉. 第二种:硬件防火墙 这里说的硬件防火墙是指

阿里云与Intel联合发布加密计算技术 神龙云服务器提供亚洲首个云上“芯片级”数据保护

10月14日,在2017杭州·云栖大会上, Intel与阿里云达成技术合作.双方联合发布加密计算技术:以Intel SGX (Intel Software Guard Extensions)可信执行环境作为基础,确保加密数据只在安全可信的环境中计算,将云上数据保护做到"芯片级". 图为英特尔软件与服务部平台安全研发总经理Anand Pashupathy 与阿里云首席安全架构师李晓宁共同发布加密计算 亚洲首家,"芯片级"云上数据保护 目前,阿里云是亚洲范围内首家提供加

阿里云与Intel联合发布加密计算,亚洲首个云上“芯片级”数据保护

10月14日,在2017杭州•云栖大会上, Intel与阿里云达成技术合作.双方联合发布加密计算技术:以Intel SGX (Intel Software Guard Extensions)可信执行环境作为基础,确保加密数据只在安全可信的环境中计算,将云上数据保护做到"芯片级". 图为英特尔软件与服务部平台安全研发总经理AnandPashupathy 与阿里云首席安全架构师李晓宁共同发布加密计算 亚洲首家,"芯片级"云上数据保护 目前,阿里云是亚洲范围内首家提供加密

Linux内核分析(五)----字符设备驱动实现

原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷,我们都会以虚拟的设备为例进行学习,所以大家不必害怕没有硬件的问题. 今天我们会分析到以下内容: 1.      字符设备驱动基础 2.      简单字符设备驱动实现 3.      驱动测试   l  字符设备基础 1.       字符设备描述结构 在linux2.6内核中,使用cdev结构体描

惠普的软件定义IT和芯片级安全

固件安全面纱被揭开,软件定义的IT成为亮点.本次Discover大会上,惠普旨在帮助用户降低成本提升系统灵活性,助推自己占据下一代基础设施领头羊位置. 融合及超融合数据中心系统市场的竞争异常激烈,但目前,可组合基础设施这个在系统管理世界逐渐流行起来的领域中,惠普是当之无愧的领军人物. Moor Insights and Strategy 创始人帕特里克·摩尔海德指出,可组合基础设施能让数据中心经理用软件指令来部署基础设施资源. 该创意最初是作为惠普Synergy集成系统中的一个功能部署的,主要通

几个Windows到Linux的代码移植问题

1.在 Linux 实现 Win32 API 之 GetTickCount 函数 为了将 Windows 中的 GetTickCount API 函数移植到 Linux,可以使用如下的代码: long GetTickCount() { tms tm; return times(&tm); } 2.Windows 和 Linux 系统关于 itoa 的移植问题 大家知道,在将 Windows 的 STL 代码移植到 Linux 系统时,由于 Linux 系统中 STL 没有实现默认的itoa 函数