草稿:
Linux 绑定线程在某个CPU运行:
1.
error: 'vdso_offset_sigtramp' undeclared (first use in this function)
(void *)(vdso_offset_##name - VDSO_LBASE + (unsigned long)(base)); \
更改文件
更改arch/arm64/kernel/vdso/gen_vdso_offsets.sh脚本
中
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2\t0x\1/p'
改为
's/^\([0-9a-fA-F]*\) . VDSO_\([a-zA-Z0-9_]*\)$/\#define vdso_offset_\2 0x\1/p'
下面这篇帖子可以参考:
Android源码kernel编译_Android系统攻城狮的博客-CSDN博客_android kernel编译
二、Linux 内核源码
Linux 内核非常庞大,超过 600 万行的代码,所以我写文章介绍 Linux 内核,也不可能每一行代码去分析,但是我会提炼其中的重点出来。实时操作(RTOS 全称Real Time Operating System)系统可以理解为对时间要求非常苛刻,可以用一个词“必须”来理解,就是在某个时间片之内必须要做某件事情。windows,Android 手机等,Linux 相反。
操作系统:VxWorks、μC/OS-II、μClinux、eCos
内核:管理硬件设备,内核跟 CPU 和硬件设备关系非常密切,在整个操作系统中的地位,具有承上启下的作用。
Linux内核中将近一半的Source Code都是设备驱动,大多数的Linux底层工程师(特别是国内的企业)都是在编写或者维护设备驱动,而无暇估计其它内容(它们恰恰是Linux内核的精髓所在)。
根据自己的学习经验,刚开始学习内核的时候,我认为要做的是在自己的脑海中建立起内核的大体框架,理解各个子系统的设计理念和构建思想,这些理念和思想会从宏观上呈献给你清晰的脉络,就像一个去除了枝枝叶叶的大树的主干,一目了然;当然,肯定还会涉及到具体的实现方法、函数,但是此时接触到的函数或者方法位于内核实现的较高的层次,是主(要)函数,已经了解到这些函数,针对的是哪些设计思想,实现了什么样的功能,达成了什么样的目的,混个脸熟的说法在这儿也是成立的。至于该主函数所调用的其它的辅助性函数就等同于枝枝叶叶了,不必太早就去深究。此时,也就初步建立起了内核子系统框架和代码实现之间的关联,关联其实很简单,比如一看到某个函数名字,就想起这个函数是针对哪个子系统的,实现了什么功能。