/* 计算page_offset到内核物理地址的偏移量:0xff5fffff7fe00000 * PAGE_OFFSET在arch/riscv/include/asm/page.h中定义: *#define PAGE_OFFSETkernel_map.page_offset */ kernel_map.va_pa_offset = PAGE_OFFSET - kernel_map.phys_addr; /* 计算内核虚拟地址与内核物理地址之间的偏移量:0xfffffffeffe00000...
1. task_struct 概述在 Linux 内核中,无论是进程还是线程,到了内核里面,都叫做任务(Task),由统一的数据结构 task_struct 进行管理。 task_struct 是 Linux 中的进程描述符,是感知进程存在的唯一实体。Linux…
Kernel:内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同时与处理器结构相关代码都放在arch/*/kernel目录下。 Lib:目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。 Maintainers:目录存放了维护人员列表,对当前版本的内核各部分都有...
适合精力集中在内核,不太需要关心用户空间的工程师,比如驱动工程师、嵌入式工程师等,以及想往这方面学习发展的朋友。 1 初探内核 版本信息与往期一致: 在往期的访谈中,我们讨论过如何阅读内核代码,在这里按照之前讨论的思路详细扩展下。 在drivers/input/keyboard 下面的文件是键盘驱动,我们选择 lm8333.c 吧(没什么...
此函数用来创建内核对象。 program,是一个程序对象,带有成功构建的执行体。 kernel_name,是程序中一个声明时带有限定符__kernel的函数名。 errcode,返回相应的错误码 CL_INVALID_PROGRAM,program无效 CL_INVALID_PROGRAM_EXECUTABLE,没有为program成功构建执行体。
之后,又有一个大佬重新对这个内核代码进行了改造 提交的commit链接如下 https://github.com/torvalds/linux/commit/d7428bc26fc767942c38d74b80299bcd4f01e7cb 他的修改的主要是增加了配置选项,就是可以软件配置使用OUT endpoint还是端点0,这主要是不同的产品定义可能需求会不同。
上一次,我们看到已经把操作系统最开始的512个字节,通过256次复制到0x90000处,然后跳转到0x9000:go这里...
这应该是系列篇最难写的一篇,全是汇编代码,需大量的底层知识,涉及协处理器,内核镜像重定位,创建内核映射表,初始化CPU模式栈,热启动,到最后熟悉的main()。 内核入口 在链接文件liteos.ld中可知内核的入口地址为ENTRY(reset_vector), 分别出现在reset_vector_mp.S (多核启动) 和 reset_vector_up.S(单核启动)...
提高资源利用率。veLinux 内核 GitHub 地址:https://github.com/bytedance/kernel
mmap是一个很常用的系统调用,无论是分配内存、读写大文件、链接动态库文件,还是多进程间共享内存,都可以看到其身影。本文首先介绍了进程地址空间和mmap,然后分析了内核代码以了解其实现,最后通过一个简单的demo驱动示例,加深对mmap的理解。 本博客已迁移至CatBro's Blog,那是我自己搭建的个人博客,欢迎关注。