从kernel源码进阶C语言

从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张图片

你可能感兴趣的:(从kernel源码进阶C语言,Linux,编程语言,linux,c语言)