为什么要有idmap

要开启MMU,需要建立页表映射,而且需要处理缓存一致性的问题,这样内核启动的依赖条件就会变得复杂。为了降低启动代码的复杂度,约定在Linux内核启动时,MMU是关闭的。这样也就意味着不能利用高速缓存的性能。为了获得更好的性能,也为了后续可以给不同的地址空间设置不同的访问属性以更好地管理内存,需要在某个阶段把MMU打开,并使能高速缓存。 但是,在关闭MMU的情况下,处理器访问的是物理地址,而MMU打开时,处理器访问的地址变成了虚拟地址。现代处理器大多数是多级流水线架构,处理器会提前预取多条指令到流水线中。打开MMU只需要向SCTLR_ELx寄存器写入特定值即可,运行到此处时,处理器已经提前预取了多条指令,这些指令要操作的地址实际是物理...

samba服务器搭建和使用

1. 准备工作 如果是虚拟机中安装的Linux系统,需要新建一个网络适配器,模式为桥接模式。 如果是独立的物理机安装了Linux系统,可以在路由器或交换机中,将物理机的IP地址设为固定的IP地址。 1.1. 查看Linux IP地址 使用ip addr或ifconfig查看Linux系统IP地址。这个在Windows映射磁盘时会用到。 2. Linux搭建samba服务器 如下操作可以使用smb_conf.sh完成。 2.1. 安装samba服务 1sudo apt install samba 2.2. 创建samba用户 执行sudo smbpasswd –a username,根据提示,输入密码,username和密码会...

u-boot的stubs机制

1. U-Boot版本 1VERSION = 2021 2PATCHLEVEL = 10 3SUBLEVEL = 4EXTRAVERSION = 5NAME = 2. 涉及的文件 include/_exports.h,辅助文件,在包含_exports.h前,定义不同的EXPORT_FUNC来实现不同的功能,其内容为一系列EXPORT_FUNC修饰的函数。 include/exports.h,函数声明。 examples/standalone/stubs.c,用于建立jumptable,将U-Boot的函数指针存入jumptable中。 common/exports.c,初始化jumptable。...

linux常用命令-文件管理

1. 打包隐藏文件 1tar -czf data.tar.gz ./.[!.]* 2. find 2.1. 查找文件并按大小排序 1find -type f -name '*.md' -printf '%s\t%p\n' | grep -v '\.git' | sort -nr | less -N 2.2. 批量删除7天前的文件 1find -type f -mtime +7 -exec rm -fr {} \; 2.3. 多个条件(-o) find ./ -name ‘.c’ -o -name ‘.h’ find ./ -name ‘*.[ch]; 2.4. 忽略大小写(-iname) find ./ -iname...

gcc宏定义中的连接符和可变参数

1. 连接符 1.1. 字符串转换# #用来把参数转换成字符串 1#define pr_var(var) printf(#var " is %d\n", var); 2 3int main(int argc, char **argv) 4{ 5 int a = 1, b = 2; 6 7 pr_var(a); 8 pr_var(b); 9 pr_var(a+b); 10} 1.2. 参数连接## 在宏中,##可以用于参数连接。 1#define regname(n) x ## n regname(8)会被展开成x8。 2. 可变参数 2.1. 可变参数__VA_ARGS__ __VA_ARGS__ 是一个可变参数的宏,这个可变参数...

sourceinsight快速建工程

1. 环境准备 Windows映射Linux下的Samba共享目录 工具脚本:https://gitee.com/kingdix10/eel-ctools 2. SourceInsight快速建工程 2.1. 修改代码,保留编译中间生成物 1keepdep_patch.sh kernel/scirpts 2keepdep_patch.sh u-boot/scirpts 原理是保留编译过程中的.d文件,这个是编译器查找的依赖文件,可以保证添加文件时不会有多余的文件。 2.2. 代码编译 在Linux下编译源码。如果之前编译过,最好clean后再编译。 2.3. 生成文件列表 1$ depfilelist.sh -h 2Usage:...

编译器预定义宏

1. 查看gcc预定义宏 在Linux下可以输入如下命令: 1gcc -posix -E -dM - < /dev/null window下,命令稍有不同 1gcc -posix -E -dM - < nul 1.1. 常见宏 macro desc __FILE__ 文件名 __LINE__ 行号 __func__ 函数名,早期版本为__FUNCTION__ __DATE__ 编译日期 __TIME__ 编译时间 __linux__ 编译平台是linux时定义