4 rikeyone

尚未进行身份认证

珠海市魅族科技有限公司开发攻城狮

等级
TA的排名 1w+

Android10(Android Q)中使用的shell

andorid10中的shell使用的是mksh(TheMirBSDKornShell)。他的代码目录在:$lsexternal/mksh/Android.bpAndroid.patch.txtmkshrcmkshrc_vendorMODULE_LICENSE_BSD_LIKENOTICEOWNERSsrc在该shell启动的时候会执行mkshrc中...

2019-10-12 17:07:39

edk2中的fdf文件简介

fdf的全称叫做flashdevicefile,它用于描述固件在flash中的布局和位置,他可以分为几个部分[Defines],[FD],[FV],[Rule],本文主要介绍如下关键的3个部分:FDSection用于描述一个flashdevice,这个部分需要在起始的地方标注[FD]。###############################################...

2019-09-30 19:00:48

Android 10上的F2FS文件系统制作

文件系统制作工具mke2fs-createanext2/ext3/ext4filesysteme2fsck-checkaLinuxext2/ext3/ext4filesystemmkfs-buildaLinuxfilesystem他会调用如下一些工具来制作文件系统:mkfs.f2fs,mkfs.bfs,mkfs.ext2,mkfs.ext3,mk...

2019-09-30 18:06:29

Linux Workqueue:work的处理

workqueue常用的queue操作接口如下所示:/***schedule_work_on-putworktaskonaspecificcpu*@cpu:cputoputtheworktaskon*@work:jobtobedone**Thisputsajobonaspecificcpu*/s...

2019-09-12 15:04:55

Linux Workqueue到CMWQ的技术演进

基础workqueue实现Linuxkernel2.6.36版本之前,内核已经实现了workqueue的功能。工作线程创建支持single-thread和Per-CPUthread两种形式的workqueue,对于singlethreadworkqueue,内核会创建单个kthread用于执行work任务,并且该kthread不会绑定到某个CPU上;对于Per-CPUthrea...

2019-09-10 20:13:08

代码分析UEFI的执行流程

UEFI的运行阶段本文的分析只会涉及到DXE之后的阶段,前面的略过。DXE阶段DXE阶段的实现函数在edk2的MdeModulePkg/Core/Dxe/DxeMain目录中,主入口函数为:VOIDEFIAPIDxeMain(INVOID*HobStart){......gBds->Entry(gBds);//DXE的最后调用B...

2019-09-03 20:37:04

LLVM-Clang编译器安装和使用

LLVM不仅仅是一个编译器,同时提供了模块化的功能和库,用于编译器的开发和功能扩展。常规的一个编译器分为前端、优化器和后端,LLVM编译器也不例外,Clang就是属于一个编译器的前端部分,LLVM属于优化器和后端,当然LLVM也可以支持其他类型的前端,比如GCC前端编译器。Clang的安装apt安装本文介绍到的LLVM-Clang就是使用Clang前端的LLVM编译器,一般情况下LLVM...

2019-08-22 17:31:09

文件系统挂载选项journal

什么是journal日志作为日志文件系统,ext4使用journal来对文件系统操作进行记录,它和文件系统数据是分开进行管理的,当我们写入文件系统时,会先把最新的数据保存在journal区域中,然后再写入到真正文件系统中,当多次写入时会不停的更新journal中的数据内容,以保持最新的写入数据。这样做保证了文件系统的可靠性,并且当文件系统出现问题时,利于分析问题。journalblock的创...

2019-08-19 19:56:36

图解Linux内核中断子系统

本文用到的缩写词汇:SVC:Supervisor(SVC)Hyp:Hypervisor(Hyp)PC:ProgramCounter(PC)CPSR:CurrentProgramStatusRegister(CPSR)SPSRs:SavedProgramStatusRegisters(SPSRs)LR:LinkRegister(LR)Irqhwid:硬件中...

2019-08-15 18:19:29

Linux内核栈和中断栈

内核栈#defineMIN_THREAD_SHIFT(14+KASAN_THREAD_SHIFT)#defineTHREAD_SIZE(UL(1)<<THREAD_SHIFT)unionthread_union{#ifndefCONFIG_THREAD_INFO_IN_TASKstructthread_info...

2019-08-09 11:47:21

scons编译系统

Scons是一个以Python语言编码的开源自动化构建工具,可以用来替换make工具。它使用更高级的语言来编写,相对于make来说对于用户更加友好,降低了学习成本,它的构建语法相对与make更加简单明了。安装sudoapt-getinstallpythonpython-pipsudoapt-getinstallscons编译规则编译规则文件SConstruct:P...

2019-08-09 09:57:15

Linux内核中的定时器

jiffies操作函数include/linux/jiffies.h:#definetime_after(a,b)\(typecheck(unsignedlong,a)&&\typecheck(unsignedlong,b)&&\((long)((b)-(a))<0))#define...

2019-08-05 16:58:49

Linux内核中的时间函数

ktime时间函数基于ktime_t格式的时间ktime_tktime_get(void);获取基于CLOCK_MONOTONIC的当前时间,返回ktime_t格式的数据类型。ktime_tktime_get_boottime(void);获取基于CLOCK_BOOTTIME的当前时间,返回ktime_t格式的数据类型。ktime_tktime_get_real(void...

2019-08-05 16:52:08

bootloader启动参数传递(二)

1.dtb是怎么传递给kernel的?首先basedtb是与kernel一起打包进boot.img中的,dtbo是一个单独分区存储,bootloader加载后整合后传递给kernel。通过把地址赋值给对应的寄存器,从而让内核知道对应的dtb信息的,对于arm32,是r2寄存器;对于arm64,是x0寄存器。2.ramdisk信息是怎么传递给kernel的?ramdisk可以打包到kern...

2019-07-30 17:00:17

Linux应用层时间和定时器

时间Linuxtime_ttime(time_t*ptr);intgettimeofday(structtimeval*restricttp,structtimezone*gz);intsettimeofday(conststructtimeval*tv,conststructtimezone*gz);posix#include...

2019-07-30 11:50:28

Linux内核如何区分匿名页映射?

page结构体关键成员内核中使用page结构体来描述物理内存,每个物理页就对应一个page结构体来描述,所以page结构体占用的内存大小是与系统物理内存大小成正比的。物理内存越大,用于描述物理页的page结构体就越多,占用的内存也就越大,因此为了减少内存的占用,page结构体大量使用了union联合体结构。如下我们只列举了本文下面要讲述的一些page成员。include/linux/mm_ty...

2019-07-29 11:44:30

Linux内核中使用的数据结构和算法

RadixTree(基树)在页缓存管理中的使用:页缓存管理中会使用到基树,address_space结构体中包含一个radixtree基树成员,因为每次内核在进行I/O操作前都会检索页高速缓存,也就是address_space结构体,为了提高检索效率,采用基树来管理和检索页高速缓存,会极大提高效率。在2.6以前的内核版本中,页缓存并不是通过基树来检索,而是通过维护一个全局散列表进行检索,...

2019-07-26 17:32:06

Linux/Android perf

perf介绍perf是Linux系统中的性能调试工具,它是一个应用层的工具,但是会从kernel的文件节点获取信息,它的源代码存放在kernel中的tools/perf目录,它在编译的时候会使用到内核代码的头文件,所以不同版本的内核一般都要使用对应版本的perf工具。虽然它的代码存在于内核目录中,但是在编译内核时并不会主动编译perf工具,如果要编译需要进入到tools/perf目录中执行mak...

2019-07-26 15:49:51

常用的两种hash算法

stringhash算法/**Asimplestringhashalgorithm**(Javaisusingthesamealgorithm)***/unsignedintstring_hash_calculate(char*key){char*p=key;unsignedinth=0;...

2019-07-25 11:32:14

内核中的Per CPU数据使用注意事项

实际上是按照cpu个数创建的一个数组,每个CPU访问自己的数组成员,所以不用持锁,但是会有一个问题需要考虑,就是内核抢占问题:1.一个访问每个CPU数据的任务,可能会被调度在不同的CPU上运行,此时对应的数组成员就不同的2.另一个任务抢占了当前任务在当前CPU上运行,如果两个任务都访问当前CPU的数据,那么可能发生问题鉴于以上问题,在每次操作每个CPU数据时,需要在操作前禁止掉抢占,操作后打...

2019-07-24 09:14:44

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。