linux知识总结
leo*liu
这个作者很懒,什么都没留下…
展开
-
我的心里一直有个操作系统梦
今天有一点小感悟,小记一下。工作已是快8年了,,从soc芯片原厂到方案商,从用linux到参与新的OpenHarmony 系统移植,一直在做与linux内核相关的工作,但是我的心里一直有个操作系统的梦,我一直想要写一个属于自己的操作系统。今天就做个开头吧,抽时间一点一点进行吧,加油...原创 2021-11-09 10:13:31 · 864 阅读 · 3 评论 -
安卓内存的统计
DDR = totalmem + 预留内存 + 内核代码段(启动阶段的打印中可以看到)totalmem = free + used + lost (这三个数据在dumpsys meminfo 中可以看到)free = pss cached + kernel cached + free(/proc/meminfo中的free)used = pss used + kernel usedpss used(用户态使用内存) :在dumpsys meminfo信息中的pss oom adjust中可以看到细分原创 2020-08-06 00:21:21 · 206 阅读 · 0 评论 -
打印的优先级以及动态打印
这里有两个方向的打印概念: 1,控制台的打印级别 2,printk的默认打印级别1.控制台的打印级别: 启动后使用这个命令: cat /proc/sys/kernel/printk, 可以看到:8 4 1 7 //数字越小代表级别越高 上述数字分别为: 8 :控制台的日志打印级别,即如果使用带打印级别的printk的打印级别 > 控制台的级别,才可以输出该打印,也就是说,它控制这内核启动时候...原创 2018-02-16 00:00:04 · 1468 阅读 · 0 评论 -
LD链接脚本
由vmlinux->Zimage: http://blog.chinaunix.net/uid-2630593-id-2530229.html 1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; arm-linux-gnu-ld -EL -p --n...原创 2018-02-15 23:20:46 · 250 阅读 · 0 评论 -
driver的兼容模式设计
有这样一种case,一个driver要支持两种制式,一般的思维是共用一种接口然后在接口里作区别,但是这种做法很乱。 可以重新分装,用新的.c文件,专门做另一种制式的封装,单独的初始化,单独的其他业务接口,但是原有的文件共用一套源文件。这样很清晰也不会乱,同时不会破坏原有的已经ok的文件...原创 2018-02-15 23:30:44 · 206 阅读 · 0 评论 -
内核线程
http://blog.csdn.net/farmwang/article/details/50094973http://www.cnblogs.com/GoodGoodWorkDayDayUp/p/3522842.htmlkthread_stop引起的OOP一般来讲,没有什么必要尽量避免去创建内核线程。因为内核线程的优先级很高,一般除了kernel已有的线程外,应尽量避免少开内核线程...原创 2018-02-15 23:31:48 · 286 阅读 · 0 评论 -
driver使用内核参数
这个需求是有的时候需要在不重编内核的情况下去开启打印,一般的做法是当driver启动以后,再去开启drier的动态打印。 但这里有个问题,有的时候需要看的是driver启动过程中的打印,这个时候就需要一个办法去查看启动过程中的打印。 http://www.360doc.com/content/16/0507/07/478627_556937727.shtml 初步想法是让driver去吃内核启动参...原创 2018-02-15 23:36:28 · 239 阅读 · 0 评论 -
driver中使用io地址
一般,一个模块中会有一个模块基地址(IO地址)我们在设计一个模块的driver时候,通常需要在初始化的时候获得该地址的虚拟地址。 2种方式:静态映射,动态映射。 静态映射不再赘述,使用IO_ADDRESS(addr)获取一一对应的提前预留的虚拟地址即可重点描述动态映射: 1.ioremap(hw_addr,size) 其中hw_addr为物理地址,这个值一般在该模块driver的某个文件直接定义:...原创 2018-02-15 23:41:41 · 2320 阅读 · 0 评论 -
内核通知链_notifier
aliliuwei 文件 发布 内核通知链_notifier linux子系统http://blog.chinaunix.net/uid-27411029-id-4931300.html 例程: http://blog.chinaunix.net/uid-23069658-id-4364171.html 你和通知链用于内核模块之前互相的一种通知机制,通知链的原理是链...原创 2018-02-16 22:03:25 · 331 阅读 · 0 评论 -
Kconfig,config,Makefile的关系
2016年5月23日一.通过Kconfig控制我们的模块编译通常我们编写完驱动code后,还需要将驱动加入到内核当中来,此时要明确两点目标:1:我们需要控制是否需要将驱动加入编译链接2:我们要决定是将驱动直接编译进内核还是将驱动编译为内核上面这两点都是需要在Makefile中去进行配置的,例如我们的驱动是my_driver.c那么我们在Makefile中的对他的编译命令就是:ob...原创 2018-02-16 22:00:22 · 5332 阅读 · 0 评论 -
export的作用
EXPORT_SYMBOL()的作用 1.作用 EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。 导出的符号可以被其他模块使用,不过使用之前一定要声明一下。EXPORT_SYMBOL_GPL()只适用于包含GPL许可权的模块。 2、使用方法 第一...原创 2018-02-16 00:15:53 · 1123 阅读 · 0 评论 -
mutex的作用
1.作用 互斥锁主要用于实现内核中的互斥访问功能。内核互斥锁是在原子 API 之上实现的,但这对于内核用户是不可见的。对它的访问必须遵循一些规则:同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。互斥锁不能进行递归锁定或解锁。一个互斥锁对象必须通过其API初始化,而不能使用memset或复制初始化。一个任务在持有互斥锁的时候是不能结束的。互斥锁所使用的内存区域是不能被释放的。...原创 2018-02-16 00:15:13 · 11621 阅读 · 0 评论 -
上层app多线程操作驱动模块
上层app多线程操作驱动时驱动的一些改动第一个就是现在上层应用去多线程操作驱动时会失败,这是由于驱动层互斥的问题,换句话说,驱动要去支持上层应用的多线程操作,则驱动中要加相应的互斥锁。第二个就是多线程操作时,会牵扯到全局数据的不同进程进程操作。这样就要对open和release函数进行改动,因为每个线程都会去open和close节点,此时必定会调用open和re...原创 2018-02-16 00:09:25 · 291 阅读 · 0 评论 -
对于open函数的一些记录
static RET_CODE dev_open(struct inode *inode, struct file *file)之前老是对open这个函数中的inode和file参数不是很理解,查了些资料也是干巴巴的说教,最近把这个东东好好理一理,其实这两个函数的作用很简单,inode用来识别不同的次设备号,file用来传递私有数据(or全局数据)看个例子:static...原创 2018-02-16 00:08:19 · 257 阅读 · 0 评论 -
linux下内核与用户层数据的交换
https://www.ibm.com/developerworks/cn/linux/l-kerns-usrs/https://www.ibm.com/developerworks/cn/linux/l-async/http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html1.基本有系统调用接口file_operation系列接口:re...转载 2018-02-15 23:56:42 · 2437 阅读 · 0 评论 -
boot flow
将boot流程总结下:如上图所示:(非高安流程)1.cpu执行boot rom,boot rom有两层意思,一是指芯片内部固化程序的rom(掉电不失存储介质),该介质比我们常见的存储介质昂贵即成本高。二是指固化在其中的一小段引导程序。这段程序用于初始化片内的一小片ram运存即SDRAM和初始化存储介质(nor/nand/sd),这样才可以将auxiliary code(小size)从flash或...原创 2018-02-15 23:42:44 · 920 阅读 · 0 评论