如何学习linux

核心不容易被代替: 操作系统级别的东西(底层编程,驱动,内核相关涉及到很多计算机基础的东西),arm+linux驱动开发,android+linux内核裁剪

找工作搜索关键词:JNI,android /安卓,linux ,arm 

找一个工资相对高些的,工作对的积累经验也好,或者慢慢转做


学习规律:因为懂得了硬件的工作原理之后,后面学习驱动会觉得简单得多了,故多花时间在硬件工作原理上;根据招聘的要求上可知,数字/模拟电子技术是做嵌入式的一个基础的重要的东西(应该想数据结构一样这些);

 学习容易忘记,是因为没有重视其中的理论和知识点的学习,以学习其中的知识点为作为基础---从实验中找知识点,从题目中找知识点(当前,arm架构多靠写实验,linux多靠写题目)。

从看视频教程《10.实验一(续):制作u-boot烧写镜像的原理,mkv210源代码分析》,画图对理解指针,理解代码非常重要.

从看视频教程《15.实验二(续):反汇编分析自己的myboot》,对自己不熟悉的知识点(arm-linux-gcc,arm汇编),自己边说变写,加强记忆。

从看视频《19.芯片型号判断,复位方式判断》、《DDR2初始化代码分析》系列,用Excel记录寄存器一步步的值,比较清晰。

http://bbs.chinaunix.net/thread-4176872-1-1.html

本地工作特点:做底层工作的不多,工资相对较高。 通用的都要Linux(会写shell和make file)

       mf工作要求:承担linux或unix下C语言网络编程(TCP/UDP)和C/C++实现JNI;熟悉android JNI的使用      

另外一个岗位是nfc:岗位职责:
1. NFC应用/驱动开发设计;
2.对NFC建联过程、NFC数据传输进行优化;
3. NFC底层稳定性问题分析;
4. NFC新技术调研与跟进。
岗位要求:
1. 熟悉NFC标准规范(ISO 14443及18092)及相关协议;
2. 精通LLCP(逻辑链路控制协议),能够针对协议进行深度定制;
3. 精通三种NFC模式(读写模式/卡模拟模式/ P2P模式);
4. 熟悉NFC底层驱动开发;
5. 熟悉C/C++Linux嵌入式开发。          

    

   本段代码来自:http://blog.csdn.net/feixiaoxing/article/details/7271937。

    微机原理和接口,都是以大学出的,以x86处理器做例子的,讲x86的内容占了很大部分,没有经典的书。看这些接口的话,直接在网上看或者看课件即可。

     在Linux下面关于C语言的内容其实挺多的。不同的人关注的地方也不一样。关注系统设计的人可能更关注整个linux系统的结构;设计驱动的人可能更关注linux驱动的配置和实现;而我在这里所关注的只是linux应用层方面的内容,属于最基础的内容,当然也是最重要的内容。实际上对应于C语言的理解在很大程度上决定了你对整个计算机系统的理解程度。从本质上说(我的理解是从操作系统原理和系统调用接口设计上说),linux和windows的区别其实远没有外界想象的那么大,当然我说的这些都是设计层面的东西。有些兴趣的朋友可以看看潘爱明的《windows内核原理和实现》这本书,然后再看看《linux内核设计和实现》这本书,相信会有不少的体会。

         体会:是呀,在操作系统原理、系统调用接口上和各个模块子系统设计原理里都是大同小异的。应用层的一些sdk(或者说类库),无论是mfc,vcl,.netframwork,还是android的sdk,或者ios的sdk等等,本质上都是进行的系统调用的功能是很相似的,进行调用的流程都是一样的。这也是为什么,理解操作系统原理,对于理解上层sdk很重要的原因吧。

        如果不了解操作系统的基本原理,组成部分、模型、基本概念和工作过程,向用户提供的重要的库函数和系统调用,就不能开放出高效的大型软件。

    学习方法:要分析实验理解原理,通过实例调用理解系统调用接口及库函数如何如何使用及作用。底层控制,都是对寄存器进行读和写。

Linux底层学习的过程是什么?
Sundy答:ARM体系结构会了之后(包括会用ARM汇编,C/C++语言,及C/C++汇编混合编程),
知道了裸板开发(会写一些小程序去控制一些电路,控制一些接口、转换),知道怎么样玩bootloader(一个系统引导的程序),
就会去写或者修改一些引导程序,这样就可以用我们的程序去启动linux操作系统(用被人的代码编译的内核,根文件系统)。

所以重点看Uart、I2C、SPI、CAN、RS485协议相关的实验(利用对比的方法一起学习),linux方向多看ipc,jni,linux裁剪

因为后面我们是用操作系统来控制IO等,所有就要学习驱动,结构等等。再往后就是android是怎么样封装。
(bootloader是一个比较特殊的裸板开发,可以看做一个很小很小的操作系统。)

2 如何研究硬件
答:站在CPU的角度考虑,完成这个工作,CPU是怎么样设计的,硬件是怎么样工作的。 已图来理解,记忆,编程(如中断模型的图)



从CUP的角度考虑(X86 ,MIPS等)(分析底层资源的,硬件设计思想,中断处理等等),举一反三,触类旁通,然后用具体板子来印证。


硬件映射到Memory,程序通过操作Memory来操作硬件。
首先,研究ARM文件;然后研究芯片(SOC)文档;最后研究厂家硬件文档。
这部分只要了解,因为我们大部分时间是去控制一些板厂商(友善之臂)的外设,
我们只要玩的就是SOC外的接口型的(GPIO,各种总线协议,存储块)
懂了这几个,可以说会底层开发了
玩硬件,(实现某个功能的时候,详细的描述不一定全部看懂,但是框图一定要搞懂)都是弄明白硬件原理之后,玩寄存器而已,就是懂得去那里去设,设置什么值(根据的是硬件原理得出的思维导图和数据手册,uboot);寄存器的操作就是读,写。
uboot是学习bootload和裸机编程最好的老师,linux内核代码是学习Linux内核最好的老师。


2 如何研究硬件
答:硬件映射到Memory,程序通过操作Memory来操作硬件。
首先,研究ARM文件;然后研究芯片(SOC)文档;最后研究厂家硬件文档。
这部分只要了解,因为我们大部分时间是去控制一些板厂商(友善之臂)的外设,
我们只要玩的就是SOC外的接口型的(GPIO,各种总线协议,存储块)
懂了这几个,可以说会底层开发了。

目的:学会怎么样写一个这个类型的驱动;当一个驱动出现问题的时候,才知道怎么样去调试一个设备。

循序渐进:linux下c编程(熟悉shell编程,熟悉makefile)---(LKD)侧重整体把握linux---(深入理解LINUX内核)侧重内核---(LINUX设备驱动程序)侧重驱动---(

LINUX内核源代码情景分析)侧重情景分析

接触到驱动层之后,需要一些 计算机系统结构,操作系统,微机原理,数电模电的知识。
学习步骤:http://blog.csdn.net/luobin1984/article/details/7945620

站在硬件的角度考虑:硬件的思想:为什么要有它?怎么样工作的?

1.从学习RTC驱动来看,学习linux的驱动。

首先,知道这类型驱动在linux里面的结构是怎么样的,怎么样分层,各个层次包含哪些文件。这样就对这个驱动的框架有了一个大体的把握。

然后,清楚这个有驱动框架里面,有多少种基本的数据结构。

以上两点是学习一个linux驱动的基础,有了这两个基础之后,才能学习linux这种驱动框架代码,学习这个驱动的流程和线索,最主要也是这点,而不要去扣这个实现细节。


2.进行ARM裸机实训的目的是什么?
答:熟悉arm体系架构(寄存器等),
    掌握arm相关知识(7种工作模式,寻址方式,ARM汇编指令集,c和汇编混合编程,arm从中断到处理完成整个工作流程,ADS集成开发环境)和硬件工作原理;

   另外一个原因是,裸机知识在实际工作中被大量的用于bootloader移植,不掌握这块会在移植u-boot方面很吃力。

    (可能用keil)


3.为什么shell编程如此重要
shell编程,无论应用开发,内核开发,驱动开发,shell都是非常有用的技术。
用作测试时写点自动化脚本。

了解shell或perl脚本编程,能够使用脚本自动化日常运维工作;



很多学linux开发的人,半途放弃的原因是什么?
1)顺序不对,不遵循循序渐进的规律;2)不遵循学以致用的规律。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值