分歧还是共存?详解Android内核安全

原创 Linux阅码场 2022-09-13 08:08

作者简介:
许庆伟:龙蜥社区eBPF技术探索SIG组 Maintainer & Linux Kernel Security Researcher
CSDN博客:内核功守道 
                           


一、知识背景


随着2003年10月安迪鲁宾联合几位朋友创建了Android公司,后来影响众人的智能设备操作系统公司由此而生(2005年被Google收购)。现如今,世界上越来越多的智能终端包括手机、TV、SmartBox和IoT、汽车、多媒体设备等等,均深度使用Android系统,而Android的底层正是Linux内核,这也让Linux内核的安全性对Android产生重大影响。
但由于Android由于想绕过商业授权的问题,又研究出来了以bionic取代Glibc、以Skia取代Cairo等类似的方案,使用的不是标准内核和GNU/Linux。由于这些原因,Google在Android内核开源的问题上,理念和Linux内核社区不是十分的匹配,这也导致了Android对内核做了大量的针对性修改,但是无法合入到Upstream上。这也导致了Android内核在安全侧有部分不同于Linux内核,侧重点也存在不同。

在操作系统级别,Android平台不仅提供Linux内核的安全功能,而且还提供安全的进程间通信 (IPC)机制,以便在不同进程中运行的应用之间安全通信。操作系统级别的这些安全功能旨在确保即使是原生代码也要受应用沙盒的限制。无论相应代码是自带应用行为导致的结果,还是利用应用漏洞导致的结果,系统都能防止违规应用危害其他应用、Android 系统或设备本身。

以下配置设置用作Android 内核配置的基础。设置会整理android-base和android- recommended.cfg 文件,android-base.cfg 和 android-recommended.cfg 文件均位于 android-common内核repo:https://android.googlesource.com/kernel/common/。

  1. android-base这些选项可实现核心Android功能,所有设备都应该启用。
  2. android-recommended这些选项可实现高级Android功能,设备可选择性启用。

上游Linux内核 4.8 版本中为内核配置片段指定了新的位置 (kernel/configs)。对于基于版本 4.8 或更高版本的分支,Android基础和建议的配置片段位于该目录中。对于基于版本 4.8 之前版本的内核分支,配置片段位于android/目录中。



二、生成内核配置


对于具有极简defconfig的设备,您可以使用以下命令来启用选项,生成一个.config文件,使用该文件来保存新的defconfig或编译一个启用Android功能的新内核:
ARCH=arch scripts/kconfig/merge_config.sh path/device_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg



三、Seccomp-BPF与TSYNC


Seccomp-BPF是一种内核安全技术,支持创建沙盒来限制进程可以进行的系统调用。TSYNC功能可以实现从多线程程序中使用Seccomp-BPF。这种能力仅限具有seccomp支持上游的架构:ARM、ARM64、x86 和 x86_64。
用于ARM-32、X86、X86_64的内核3.10向后移植,确保Kconfig中已启用CONFIG_SECCOMP_FILTER=y(截至Android 5.0 CTS已验证),然后择优挑选来自AOSP kernel/common:android-3.10存储区的以下变更:9499cd23f9d05ba159fac6d55dc35a7f49f9ce76…a9ba4285aa5722a3b4d84888e78ba8adc0046b28

1.cfc7e99e9 arm64: Add _NR* definitions for compat syscalls
(arm64:为兼容性系统调用添加 _NR* 定义),作者:JP Abgrall
2.bf11863 arm64: Add audit support
(arm64:添加审计支持),作者:AKASHI Takahiro
3.3e21c0b arm64: audit: Add audit hook in syscall_trace_enter/exit()
(arm64:审计:在 syscall_trace_enter/exit() 中添加审计钩),作者:JP Abgrall
4.9499cd2 syscall_get_arch: remove useless function arguments
(syscall_get_arch:移除无用的函数参数),作者:Eric Paris
5.2a30a43 seccomp: create internal mode-setting function
(seccomp:创建内部 mode-setting函数),作者:Kees Cook
6.b8a9cff seccomp: extract check/assign mode helpers
(seccomp:提取检查/分配模式帮助程序),作者:Kees Cook
7.8908dde seccomp: split mode setting routines
(seccomp:拆分模式设置例行程序),作者:Kees Cook
8.e985fd4 seccomp: add “seccomp” syscall
(seccomp:添加“seccomp”系统调用),作者:Kees Cook
9.9d0ff69 sched: move no_new_privs into new atomic flags
(sched:将 no_new_privs 移至新的原子标志中),作者:Kees Cook
10.b6a12bf seccomp: split filter prep from check and apply
(seccomp:将过滤器准备工作从检查和应用流程中分离出来),作者:Kees Cook
11.61b6b88 seccomp: introduce writer locking
(seccomp:引入写入者锁定),作者:Kees Cook
12.c852ef7 seccomp: allow mode setting across threads
(seccomp:允许跨线程模式设置),作者:Kees Cook
13.f14a5db seccomp: implement SECCOMP_FILTER_FLAG_TSYNC
(seccomp:实施 SECCOMP_FILTER_FLAG_TSYNC),作者:Kees Cook
14.9ac8600 seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock
(seccomp:用 assert_spin_lock 替换 BUG(!spin_is_locked())),作者:Guenter Roeck
15.900e9fd seccomp: fix syscall numbers for x86 and x86_64
(seccomp:修复 x86 和 x86_64 的系统调用号),作者:Lee Campbell
16.a9ba428 ARM: add seccomp syscall
(ARM:添加 seccomp 系统调用),作者:Kees Cook
17.4190090 ARM: 8087/1: ptrace: reload syscall number after secure_computing() check
(ARM:8087/1:ptrace:在 secure_computing() 检查后重新加载系统调用号),作者:Will Deacon
18.abbfed9 arm64: ptrace: add PTRACE_SET_SYSCALL
(arm64:ptrace:添加 PTRACE_SET_SYSCALL),作者:AKASHI Takahiro
19.feb2843 arm64: ptrace: allow tracer to skip a system call
(arm64:ptrace:允许跟踪进程跳过系统调用),作者:AKASHI Takahiro
20.dab1073 asm-generic: add generic seccomp.h for secure computing mode 1
(asm-generic:为安全计算模式 1 添加常规 seccomp.h),作者:AKASHI Takahiro
21.4f12b53 add seccomp syscall for compat task
(为兼容性任务添加seccomp系统调用),作者:AKASHI Takahiro
22.7722723 arm64: add SIGSYS siginfo for compat task
(arm64:为兼容性任务添加 SIGSYS siginfo),作者:AKASHI Takahiro
23.210957c arm64: add seccomp support
(arm64:添加 seccomp 支持),作者:AKASHI Takahiro



四、HWAddressSanitizer


硬件辅助的AddressSanitizer (HWASan) 是一款类似于AddressSanitizer的内存错误检测工具。与ASan相比,HWASan使用的内存少得多,因而更适合用于整个系统的清理。HWASan 仅适用于Android 10及更高版本,且只能用于AArch64硬件。具体可以检测到以下异常情况:
  1. 堆栈和堆缓冲区上溢/下溢
  2. 释放之后的堆使用情况
  3. 超出范围的堆栈使用情况
  4. 重复释放/错误释放
  5. 返回之后的堆栈使用情况

HWASan基于内存标记方法,在这种方法中,小的随机标记值同时与指针和内存地址范围相关联。为使内存访问有效,指针和内存标记必须匹配。HWASan依赖于ARMv8功能 Top-Byte-Ignore(TBI,也称为虚拟地址标记)将指针标记存储在地址的最高位。

HWASan要求Linux内核接受系统调用参数中被标记的指针。在以下上游补丁程序集中实现了对此项要求的支持:

  1. arm64 已标记地址 ABI
  2. arm64:对传递给内核的用户指针取消标记
  3. mm:避免在 brk()/mmap()/mremap() 中创建虚拟地址别名
  4. arm64:验证从内核线程调用的 access_ok() 中的已标记地址

Android-4.14及更高分支中的通用Android内核以向后移植的形式提供这些补丁程序,但 Android 10专属分支(例如android-4.14-q)未以向后移植的形式提供这些补丁程序。



五、KASAN


Android包括内核地址排错程序(KASAN)。KASAN是内核与编译时修改的组合,形成了一个插桩系统,可以实现更简单的错误发现和根本原因分析。KASAN可以检测内核中许多类型的内存违规行为。它还可以检测堆栈、堆和全局变量中的出界读取和写入操作,并可检测释放后再使用和双重释放错误。
KASAN将编译时内存函数插桩与影子内存相结合,以便跟踪运行时的内存访问,会有八分之一的内核内存空间专用于影子内存,以确定内存访问是否有效。目前在x86_64和 arm64架构中受支持。自4.0以来,它一直是上游内核的一部分,并且已经反向移植到基于Android 3.18的内核。KASAN已在基于内核4.9.2 通过gcc编译的Android内核上进行了测试。
除了KASAN,kcov是另一个对测试非常有用的内核修改。kcov旨在允许在内核中进行覆盖率引导模糊测试。它会测量在系统调用输入方面的覆盖率,对于模糊系统(如syzkaller)非常有用。
如需在启用KASAN和kcov的情况下编译内核,请将以下构建标志添加到内核构建配置:
CONFIG_KASAN
CONFIG_KASAN_INLINE
CONFIG_TEST_KASAN
CONFIG_KCOV
CONFIG_SLUB
CONFIG_SLUB_DEBUG
CONFIG_CC_OPTIMIZE_FOR_SIZE
并移除以下内容:
CONFIG_SLUB_DEBUG_ON
CONFIG_SLUB_DEBUG_PANIC_ON
CONFIG_KASAN_OUTLINE
CONFIG_KERNEL_LZ4
然后照常构建和刷写内核。KASAN内核比原始内核大得多。考虑到这一点,请修改任何启动参数和引导加载程序设置(如果适用)。
刷写内核后,检查内核启动日志,看看KASAN是否已启用并正在运行。内核将启动并显示KASAN的内存映射信息,例如:
...[    0.000000] c0      0 Virtual kernel memory layout:[    0.000000] c0      0     kasan   : 0xffffff8000000000 - 0xffffff9000000000   (    64 GB)[    0.000000] c0      0     vmalloc : 0xffffff9000010000 - 0xffffffbdbfff0000   (   182 GB)[    0.000000] c0      0     vmemmap : 0xffffffbdc0000000 - 0xffffffbfc0000000   (     8 GB maximum)[    0.000000] c0      0               0xffffffbdc0000000 - 0xffffffbdc3f95400   (    63 MB actual)[    0.000000] c0      0     PCI I/O : 0xffffffbffa000000 - 0xffffffbffb000000   (    16 MB)[    0.000000] c0      0     fixed   : 0xffffffbffbdfd000 - 0xffffffbffbdff000   (     8 KB)[    0.000000] c0      0     modules : 0xffffffbffc000000 - 0xffffffc000000000   (    64 MB)[    0.000000] c0      0     memory  : 0xffffffc000000000 - 0xffffffc0fe550000   (  4069 MB)[    0.000000] c0      0       .init : 0xffffffc001d33000 - 0xffffffc001dce000   (   620 KB)[    0.000000] c0      0       .text : 0xffffffc000080000 - 0xffffffc001d32284   ( 29385 KB)...

误将如下所示:
[   18.539668] c3      1 ==================================================================[   18.547662] c3      1 BUG: KASAN: null-ptr-deref on address 0000000000000008[   18.554689] c3      1 Read of size 8 by task swapper/0/1[   18.559988] c3      1 CPU: 3 PID: 1 Comm: swapper/0 Tainted: G        W      3.18.24-xxx #1[   18.569275] c3      1 Hardware name: Android Device[   18.577433] c3      1 Call trace:[   18.580739] c3      1 [] dump_backtrace+0x0/0x2c4[   18.586985] c3      1 [] show_stack+0x10/0x1c[   18.592889] c3      1 [] dump_stack+0x74/0xc8[   18.598792] c3      1 [] kasan_report+0x11c/0x4d0[   18.605038] c3      1 [] __asan_load8+0x20/0x80[   18.611115] c3      1 [] android_verity_ctr+0x8cc/0x1024[   18.617976] c3      1 [] dm_table_add_target+0x3dc/0x50c[   18.624832] c3      1 [] dm_run_setup+0x50c/0x678[   18.631082] c3      1 [] prepare_namespace+0x44/0x1ac[   18.637676] c3      1 [] kernel_init_freeable+0x328/0x364[   18.644625] c3      1 [] kernel_init+0x10/0xd8[   18.650613] c3      1 ==================================================================


六、Top-byte lgnore


从Android 11开始,对于64位进程,所有堆分配都具有一个由实现定义的标记,该标记在具有对ARM Top-byte Ignore(TBI) 的内核支持的设备上的指针顶部字节中设置。在回收期间检查该标记时,任何修改此标记的应用都会被终止。对于未来支持ARM内存标记扩展(MTE)的硬件来说,这是必需的。
ARM的Top-byte Ignore功能适用于所有Armv8 AArch64硬件中的64位代码。此功能意味着硬件在访问内存时会忽略指针的顶部字节。TBI需要一个兼容的内核,以便正确处理从用户空间传递的已加标记的指针。4.14(Pixel 4) 及更高版本中的Android通用内核具有必需的TBI补丁程序。
在内核中支持TBI的设备在进程启动时会被动态检测到,并且对于所有堆分配,都会在指针顶部字节中插入一个依赖于实现的标记。之后,系统会运行一项检查,以确保在回收内存时,相应标记没有被截断。
ARM的内存标记扩展(MTE)可以帮助解决内存安全问题。MTE的工作原理是对堆栈、堆和全局变量上的每次内存分配的第 56到59个地址位加标记。硬件和指令集会自动检查每次访问内存时是否使用了正确的标记。
在指针顶部字节中错误存储信息的Android应用一定会在启用了MTE的设备上中断。利用加标记的指针,可以在MTE设备可用之前更轻松地检测并拒绝对指针顶部字节的错误使用。



七、流控完整性(CFI)


从2016年开始,Android上大约86%的漏洞与内存安全相关。大多数漏洞被攻击者所利用,他们会改变应用的正常控制流,获取遭利用的应用的所有权限来执行任意恶意活动。控制流完整性 (CFI)是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。
在Android 8.1媒体堆栈中启用了LLVM的CFI实现。在Android 9中的更多组件以及内核中启用了CFI。系统CFI 默认处于启用状态,但内核CFI需要手动启用。
LLVM的CFI需要使用链接时优化(LTO)进行编译。LTO会一直保留对象文件的LLVM位码表示法直至链接时,以便编译器更好地推断可以执行哪些优化。启用LTO可缩减最终二进制文件的大小并提高性能,但会增加编译时间。在Android上进行测试时,结合使用 LTO和CFI对代码大小和性能开销的影响微乎其微;在少数情况下,这两者都会有所改善。
在模块中想打开CFI的话,makefile(如/platform/frameworks/av/cmds/stagefright/Android.mk)中需要添加以下几行代码:
#在构建过程中将CFI指定为排错程序LOCAL_SANITIZE := cfi

#开启CFI的诊断模式。诊断模式会在崩溃期间在logcat中输出额外的调试信息,这在开发和测试build时很有用LOCAL_SANITIZE_DIAG := cfi

#支持组件针对个别函数或源代码文件选择性地停用CFI插桩LOCAL_SANITIZE_BLACKLIST := cfi_blacklist.txt
所有受支持的Android内核版本中都包含kCFI补丁,CONFIG_CFI_CLANG选项会启用 kCFI,并在 GKI 中有默认设置。
启用kCFI后,修正其驱动程序可能存在的任何类型不匹配错误。通过不兼容的函数指针间接调用函数将导致CFI故障。当检测到CFI故障时,内核会输出一条警告,其中包括被调用的函数和导致故障的堆栈轨迹。可以通过确保函数指针始终与调用的函数属于同一类型来修正此问题。
如需协助调试CFI故障,请启用CONFIG_CFI_PERMISSIVE,它会输出警告(而不会导致内核崩溃)。



八、ShadowCallStack


ShadowCallStack(SCS)是一种LLVM插桩模式,可将函数的返回地址保存到非叶函数的函数prolog中单独分配的ShadowCallStack,并从函数epilog中的ShadowCallStack加载返回地址,从而防止返回地址覆盖(比如堆栈缓冲区溢出)。返回地址也存储在常规堆栈中,以便与展开程序兼容,但除此之外就没有用处。这样可以确保攻击行为(修改常规堆栈上的返回地址)不会对程序控制流造成任何影响。
在aarch64上,此插桩机制使用x18寄存器来引用ShadowCallStack,这意味着不必将对 ShadowCallStack的引用存储在内存中。因此,实现的运行时可避免将ShadowCallStack地址暴露给能够读取任意内存的攻击者 。
要为内核启用ShadowCallStack,请将下面这行代码添加到内核配置文件:
CONFIG_SHADOW_CALL_STACK=y


九、总结


除以上内核安全特性外,Android提供了一些关键的安全功能,其中包括:
基于用户的权限模式
  1. 进程隔离
  2. 实现安全IPC的可扩展机制
  3. 移除内核中不必要的和可能不安全的部分
我们也可以看到,上述很多功能都是基于LLVM编译器来实现,在现实工作中,LLVM也不只是作为一个Compiler使用,对于优化程序性能、增加安全检测等更是有很大的帮助,包括safe stack、CFI、LeakSanitizer、MemorySanitizer等等方案,随着Android的演进,Android内核在集成Linux内核主线版本的优势下,再发展适合自身生态的内核安全方案,在庞大数量设备的基础上,既是挑战,也是机遇,期待Android能给出完美的答案。

如需进庆伟老师群沟通

请添加小马微信:Linuxer2022


Linux阅码场 专业的Linux技术社区和Linux操作系统学习平台,内容涉及Linux内核,Linux内存管理,Linux进程管理,Linux文件系统和IO,Linux性能调优,Linux设备驱动以及Linux虚拟化和云计算等各方各面.
评论
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 127浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 145浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 100浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 68浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 85浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 173浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 55浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 170浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 104浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 45浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 119浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 75浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦