Linux 内核
文章平均质量分 50
Eric_Xi_BJ
热爱嵌入式
展开
-
【无标题】rk3588编译问题
#UsageinputArguments-1-9-d-z-f-h/-H31make[2]make[2]***正在删除文件“arch/arm64/boot/Image.lz4”170make[1]make[1]***正在等待未完成的任务....214makeERRORERROR。原创 2022-07-29 17:03:08 · 3541 阅读 · 2 评论 -
Linux内存管理之kmalloc 与 __get_free_page()
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分-转载 2017-04-20 16:29:23 · 1470 阅读 · 0 评论 -
只读文件系统,mdev挂载处理
/bin/mount -t proc /proc /proc/bin/mount -t sysfs sysfs /sys/bin/mount -t tmpfs tmpfs /dev/bin/mount -t tmpfs tmpfs /tmp/tmpfs//bin/mount -t tmpfs tmpfs /var原创 2017-04-06 17:56:07 · 697 阅读 · 0 评论 -
arch/mips/kernel/head.S 和arch/mips/boot/zcompres/head.S 关系
arch/mips/boot/zcompres/下的ld.script , head.S misc.c piggy.c dummy.c 是为了在生成的vmlinux加上解压的头使用的arch/mips/kernel/head.S 是内核运行start_kernel之前的初始化汇编代码。最终进入已start_kernel开始的C语言历程先占位,等有时间了具体分析一下原创 2017-04-19 11:47:47 · 638 阅读 · 0 评论 -
Linux下的lds链接脚本基础
0. Contents1. 概论2. 基本概念3. 脚本格式4. 简单例子5. 简单脚本命令6. 对符号的赋值7. SECTIONS命令8. MEMORY命令9. PHDRS命令10. VERSION命令11. 脚本内的表达式12. 暗含的连接脚本1. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds转载 2017-04-19 10:51:28 · 562 阅读 · 0 评论 -
内核裁剪错误
mount: mounting tmpfs on /dev failed: Invalid argumentmount: mounting tmpfs on /tmp failed: Invalid argument解决方法:配置内核参数make menuconfigFile systems ---> Pseudo filesystems原创 2017-03-07 13:34:02 · 366 阅读 · 0 评论 -
U-boot 大体启动流程
1.以board_init_f为函数的CPU级别的硬件初始化GPIO gpio_init();使能UART的CLK,为控制台打印信息做提前准备初始化各种时钟,PLL,Timer关闭看门狗初始化DDR的CPU端的控制转入下一阶段 2.以board_init_r为函数的板级别外设的硬件初始化串口的初始化Fl原创 2017-03-03 09:15:40 · 503 阅读 · 0 评论 -
ELF文件和BIN文件
文件的内容:1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。文件的执行:1. 执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; FILE *fp = fopen("vm转载 2016-12-29 10:51:46 · 905 阅读 · 0 评论 -
kernel 高精度tick hrtimer 学习笔记
- 理论阐述:- 1. 在内核运行的过程中,采用了两种timer机制(周期模式、高精度模式)- 2. 周期模式,跟先前的timer机制没有本质区别- timer采用period模式,直接产生tick,周期性地产生中断,执行timer中断服务程序- 硬件timer的中断服务程序里面,直接执行进程时间片计算等关键任务。- 3. 高精度模式:- timer转载 2016-11-30 11:26:16 · 1864 阅读 · 0 评论 -
kernel启动过程的三个特殊进程
Linux下有3个特殊的进程,分别是idle进程、init进程、kthreadd进程idle进程[linux]进程(三)——idle进程Linux下0号进程的前世(init_task进程)今生(idle进程)—-Linux进程的管理与调度(五)idle进程(PID = 0):其前身为init_task进程,该由系统自动创建, 运行在内核态,是系统创建的第一个进程,也转载 2016-12-01 11:58:32 · 1114 阅读 · 0 评论 -
platform总线注册过程及platform_driver与platform_device的匹配
我们知道,按platform结构写驱动,我们只需注册platform_device和platform_driver而不需要我们自己去注册platform总线,因为系统启动就有那条总线,那么它是怎么得到的呢?这里进行具体跟踪一下:start_kernel——>rest_init——>kernel_thread(这个线程创建很重要)——>kernel_init——>do_basic_s转载 2016-12-02 11:40:55 · 355 阅读 · 0 评论 -
linux initcall机制
Linux系统启动过程很复杂,因为它既需要支持模块静态加载机制也要支持动态加载机制。模块动态加载机制给系统提供了极大的灵活性,驱动程序既可支持静态编译进内核,也可以支持动态加载机制。Linux系统中对设备和子系统的初始化在最后进行,主要过程可以用下图表示。图1进入子系统初始化时,在内核init进程中进行设备初始化,最为复杂、诡异的机制莫过于do_initcalls(转载 2016-12-01 11:36:15 · 872 阅读 · 0 评论 -
linux系统的7种运行级别
Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多用户状态(没有NFS)运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式运行级别4:系统未使用,保留运行级别5:X11控制台,登陆后进入图形GUI模式运行转载 2016-08-25 13:39:32 · 860 阅读 · 0 评论 -
Linux开机启动步骤
开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP转载 2016-08-25 10:21:42 · 968 阅读 · 0 评论 -
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
1.内存为什么要分段? 分成多少种段? 段与段寄存器的区别?8086CPU有20根地址线,最大可寻址内存空间为1MB。而8086的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段,也就是把1MB空间分为若干个段,每段不超过64KB,在8086中设置4个16位的段寄存器,用于管理4种段:CS是代码转载 2016-08-12 10:38:08 · 11174 阅读 · 3 评论 -
Linux下逻辑地址-线性地址-物理地址图解
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的基地址,转载 2016-08-12 10:08:55 · 348 阅读 · 0 评论 -
Linux内核驱动之DDR3
1 相关原理 DDR3内部相当于存储表格,和表格的检索相似,需要先指定 行地址(row),再指定列地址(column),这样就可以准确的找到需要的单元格。对于DDR3内存,单元格称为基本存储单元(也就是每次能从该DDR3芯片读取的最小数据),存储表格称为逻辑bank(DDR3内存芯片都是8个bank,也就是说有8个这样的存储表格) 所以寻址的流程是先指定bank地址,再指定行地址(转载 2016-08-22 18:22:13 · 7332 阅读 · 0 评论 -
Linux下逻辑地址-线性地址-物理地址图解
一、逻辑地址转线性地址 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov 0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据转载 2016-08-29 10:25:43 · 377 阅读 · 0 评论 -
Linux内存管理之mmap详解
一. mmap系统调用1. mmap系统调用 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用read,write等系统调用.转载 2016-08-29 10:02:37 · 477 阅读 · 0 评论