从kernel源码进阶C语言

第一章 关于学习和技能提升
第二章 常见的宏定义深度分析
 2.1 ARRAY_SIZE(arr)宏深度解析
 2.2 max(x, y)宏深度解析
 2.3 container_of(ptr, type, member)宏深度解析


文章目录

  • 从kernel源码进阶C语言
  • 前言
  • 一、关于学习和技能提升
  • 总结

前言

是否还记得第一次点亮开发板的欢呼雀跃,第一次写linux驱动时的无从下手。对于嵌入式开发者来说,大部分都是从单片机开发起步的,单片机开发的那种胸中有丘壑,眼里存山河的白盒子开发方式让自己觉得一切尽在掌握中,切换到Linux时停杯投箸不能食,拔剑四顾心茫然的黑盒子开发方式无力感肆意,而也是从裸机到OS的切换,让我们认识到了设计模式,设计框架,操作系统原理等等,而作为OS代表的kernel由于其开源免费,性能优异,应用广泛的特点是值得我们深入分析和学习的。第一次阅读源码时,跟着教程配置完SourceInsight,打开kernel的大门,是不是觉得自己学的C和kernel的C不是一个C,看关键字都认识,看程序确一头雾水。本分栏将会通过对kernel中C语言的高级用法进行分析,提升源码阅读效率,也能加深大家对C语言的理解,对程序设计的思考。


一、关于学习和技能提升

作为一个技术人员,对技术上应该要有自己的追求,而不是安于现状,从现实的角度来说,只有提升自身的技术能力才能获得更大的发展平台,拿到更高的收入,对于转型做管理既能有的放矢又能以技服人。不要去参与无意义的什么语言是最好的编程语言,什么面向对象比面向过程编程先进的讨论,面向money才是芸芸众生的选择。把时间多花在提升自己上会更值得。工作、学习中多问自己为什么,多思考为什么才能比别人进步更快,对技术有更深刻的理解;对于学习的效率问题,方法是第一位的,但是有时把所有的精力都放在所谓的速成方法上会容易忘记甚至鄙视最朴实无华的重复,而往往很多时候,只有走了弯路才会体会到重复有时是最具有效率的学习方式。对于资料查找,高质量的学习网站,资料搜索技巧还是要掌握的;对于开发工具,Eclipse、Git、Android、adb、gdb、vim等也是要勤加练习,不然开发中会发现,工具的不熟悉有时非常拖累开发效率;对于程序的调试技巧,无论是kernel、Linux应用、Android framework、Android App等常用的调试工具、调试技巧,对自己工作上有用的必须要能熟练使用,其带来的是几十倍的开发效率。只有效率上来才能降低自己工作工作强度和时间,让自己有更多时间去学习提升从而形成一个正循环,而不是因为技术水平限制而加班,因为加班而没有时间学习提升然后技术水平无法提高,这样的负循环会限制自身的发展。
学习是一个螺旋曲线的过程,在互联网资讯发达,信息无处不在的今天,很多人习惯了信息泛滥,知识的易于获取,这些对确实有效的降低了我们的学习成本,提升了学习效率,通过互联网我们可以看到高手分享的真知灼见,前辈分享的经验心得,但是仅仅看过就不代表我们自己掌握了,就像我们有时候自嘲是面向Google、百度编程一样,但是也确实有不少是离开了搜索引擎,无他人技术分享就无法进行项目开发的。但是要拉开和他人的差距,就只有不断的练习,阅读源码,项目实战,而这个过程往往也是痛苦,孤寂的,由于学习的螺旋曲线,可能在达到某个技能水平后一直感觉自我徘徊不前,甚至在退后,这极有可能是技能上升到新台阶的前兆,而身边有技术大牛指导引路就能事半功倍。但是现实是我们身边可能没有这样的人,就算有大牛也没那么多时间去指点,但三人行必有我师,在向他人提问时,最好自己先尝试了所有的可能,整理出问题和可能的方向,这样再去请教他人一方面能提升自己的能力,更重要的是能节约他人时间,让别人更愿意去帮助你,毕竟你我都不喜欢被一个简单问题反复打扰。成长路上,一定都是孤独的。因为别人看到的只是你取得成绩的时候,从来没有人会了解你默默付出的那段历程。
CSDN上大牛众多,而撇开文章质量不谈,就单论一周发一两篇博客,坚持一两年又有多少人能做到呢,行百里者半于九十,希望自己也能坚持把这个分栏写下去吧。

总结

啰嗦了这么多,以上仅是个人有失偏颇的观点,也希望得到各大高手的指点,多多交流学习,不吝赐教,让我能更快进步。本分栏将对kernel的max、container_of、ARRAY_SIZE等宏、list_head等内核数据结构进行分析、探讨,尽量讲明白演化过程,受限于个人水平,有描述不足或错误的地方,还请批评指教。以下是个人公众号,如有疑问可以私信或者公众号私聊交流。

从kernel源码进阶C语言相关推荐

  1. c语言即时通讯软件源码,即时通讯软件源码-基于c语言即时通讯软件代码实现

    我不知道哪种语言无关紧要.开源,我不知道该用什么. 即时通讯软件源代码为JAVA语言 对于即时通讯软件源代码最好是用C语言编写的,想学一下,感谢您即时通讯软件有什么. includewinscock2 ...

  2. Ubuntu 22.04.1 配置 LXR 阅读Linux kernel源码

    配置环境 首先更新一下 $ sudo apt-get update 根据lxr的官方文档, 我们需要准备Perl,ctags $ sudo apt-get install perl universal ...

  3. Kernel源码笔记之调度:3.CFS

    Kernel源码笔记目录 简介 主要介绍CFS(Completely Fair Scheduler)完全公平调度器. 代码基于4.19. 两个核心数据结构 // kernel/sched/sched. ...

  4. Kernel源码笔记之调度:4.Fork系统调用

    Kernel源码笔记目录 简介 fork系统调用是用户空间进程的起点,fork的流程中涉及了内核中大多数核心的基础组件,比如:文件系统,内存管理,namespace等等,execve用来执行一个程序, ...

  5. C语言项目源码,C语言源码大全

    一.C语言源码大全 C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.尽管 ...

  6. WoShop多商户进口出口跨境电商uniapp商城源码,多语言翻译逻辑

    WoShop多商户进口出口跨境电商uniapp商城源码,多语言翻译逻辑(含国际支付.国际物流,APP+H5) 我觉得WoShop商城系统与市面上绝大部分的源码商相比,最大的区别在于,我们足够期待你的成 ...

  7. c/c++/易语言驱动内存无痕读写源码-包含易语言调用示例代码

    c++驱动源码文件目录 易语言调用驱动示例代码 Windows驱动程序是一种特殊的系统程序,它可以访问和控制系统资源,并且不受其他应用程序的限制.它可以获取系统资源,进行更深入的系统控制,包括读取其他 ...

  8. 一对一视频聊天源码中的语言包应该如何开发

    作为专业的一对一视频聊天源码开发服务商,与国外客户打交道是必不可少的,但是由于语言不同所以在开发和后期搭建部署时会遇到一些障碍. 除此之外还需要考虑国外客户在其所在国家上线运营时的语言问题,这就需要开 ...

  9. Linux内核学习(五):linux kernel源码结构以及makefile分析

    Linux内核学习(五):linux kernel源码结构以及makefile分析 前面我们知道了linux内核镜像的生成.加载以及加载工具uboot. 这里我们来看看linux内核的源码的宏观东西, ...

最新文章

  1. 零基础怎么学习web前端开发
  2. python3 struct模块 处理二进制 pack unpack用法
  3. GraphQL报错:error: NetworkError when attempting to fetch resource.
  4. 中国电子学会scratch等级考试三级
  5. nginx 和 nodejs配置使用搭建网站
  6. 设置按峰值带宽计费_云平台界面优化升级!VPC网络包年包月计费调整!
  7. 实时查看磁盘inode和block变化
  8. Linux下安装Apache Maven安装
  9. head first设计模式 pdf_设计模式之观察者模式
  10. Kontakt 6 for Mac(强大的音频采样器软件)
  11. Linux 高性能服务器编程——多进程编程
  12. 屏蔽系统的故障定位案例
  13. 阿里云服务器搭建 Redis 集群
  14. shell中用grep查找并且不输出_grep无法查找shell传过来的变量?先注意一下文本格式吧!...
  15. 利用大数据打造智慧港航运
  16. 企业信息化整体架构图
  17. C#操作Word(五)——在Word文档中插入图片
  18. MATLAB | 艺术就是画圈圈
  19. Matlab —— 02 基本操作与矩阵输入
  20. java没错泄露_记一次尴尬的Java应用内存泄露排查

热门文章

  1. 【乐通达】微信永不缺席!连发三大重磅更新,视频号终于成了视频号
  2. 影响蜂糖李苗花芽分化的因素
  3. 文件上传之黑名单绕过
  4. mts如何转换为mp4
  5. android手机文件快速扫描,并归类
  6. 11年瑞纳手动挡值多少钱_10年瑞纳值多少钱(10年的手动高配瑞纳,跑了4万公里,现在值多少钱?)...
  7. Qt 编程 keySight 34401A 万用表(串口232编程)
  8. 163个人邮箱如何注册申请?vip邮箱有哪些优点?
  9. hdu 5234 动态规划
  10. R语言实现并行计算[parallel,Rdsm]