嵌入式Linux学习笔记之第一阶段---基础篇

  嵌入式Linux学习分五个阶段

    第一阶段:

      01嵌入式环境搭建初期
      02C语言语法概述
      03C语言内存操作
      04c语言函数
      05linux基础
      06gun基础

    第二阶段:

      01-linux之io系统编程

      02-linux进程间通信

      03-linux多线程

      04-linux网络编程基础

    第三阶段:

      01-ARM开发板基础知识

      02-ARM汇编语言

      03-ARM硬件开发基础

      04-ARM Bootloader开发

      05-ARM硬件接口开发

    第四阶段:

      01-移植搭建

      02-uboot、UART、DDR2、board_init、根文件系统、linux内核分析

      03-字符设备驱动、linux驱动中断剖析、input子系统学习

      04-内核、IIC设备驱动学习

    第五阶段:

      项目开发实战

以下是第一阶段的学习笔记:

1、实验室一个老铁的笔记:https://www.cnblogs.com/kb19970405/p/11075257.html

2、我自己做的笔记:

一、C语言基础篇

1、内存分布思想
    内存的属性:①大小;②在哪里
    %p看地址
    代码段   只读数据段R   全局的数据空间RW(初始化和未初始化的)   运行时的堆空间(malloc)    栈空间(局部变量)   内核空间(应用程序不许访问)
    
2、内存分布之只读空间
    代码段    只读数据段(字符串常量)

3、内存分布之数据段
    未初始化的全局数据---》bss
    初始化全局数据--------》data
    函数中static int a------》bss

4、内存分布之堆空间
    运行时,可以自由,自我管理的分配和释放的空间,生命周期由程序员决定
    malloc()
    free()

5、函数
    标签---------函数名(地址)
    函数三要素:函数名(地址);输入参数;返回值----------》告知编译器
    指针表示函数:int (*p)(int,int, char);
    
6、连续空间传递:字符空间和非字符空间
    (地址)
    数组
    结构体----结构体变量
    
7、连续空间只读性
    void fun(char *p)(给空间可被修改);---------------void fun(const char *p);(只读)

8、函数输入的字符空间----------内存里面存放了0x00作为结束符
    char *p
    空间:空间首地址+结束标志
    int strlen(const char *p);

9、函数输入的非字符空间--------数量
    unsigned char *p    
    void fun(unsigned char *p,int len);
    void*  :数据空间的标识符
    void *memcpy(void *dest, const void *src, size_t n);

    int fun(void *buf, int len);
    {
        unsidgned char *tmp=(unsigned char*)buf;//强制类型转换
    }

10、函数返回值:基本数据类型、指针类型        (静态区、只读区、堆区)
    拷贝
    int *fun(void);------------->void fun(int **p);更新地址

11、返回连续空间类型-----指针类型
    int *fun();
    int *p=fun();
    返回地址:合法性(不是局部变量(特别是函数中定义的局部变量(除非加static静态或者用malloc(堆)申请)作为返回))-------重点
    
*12、static的作用:
    修饰局部变量:局部静态化,局部变量在静态数据段存在,生存周期非常长
    修饰全局变量:防止重命名,限制变量名只在本文件内起作用    
    修饰全局函数:防止重命名,限制函数名只在本文件内起作用

13const:        C:只读,建议性     C++:常量

14volatile:
    防止C语言编译器的优化
    它修饰的变量,该变量的修改可能通过第三方来修改
    
*15、地址0x67a9存储整型变量0xaa66----------》*((int*)0x67a9)=0xaa66

二、Linux操作系统基础篇

1、Linux组成结构:
    硬件--》内核--》shell和一些工具--》用户
       |--》文件系统

2、文件类型:
    普通文件    -
    目录文件   d
    链接文件    l
    块设备    b
    字符设备    c
    Scoket    s
    管道文件    p

3、命令行别名
    alias     列出已经建立的别名列表
    alias alias-name(you want)= 'value'(原本)    建立别名
    unalias  alias-name    取消别名

4、通配符:①*0个或多个;②?单个;③[xx]某个范围内的任意一个字符

5、输入输出重定向
    >:将一个命令的输出放入文件而非屏幕
    >>:不会把原文件覆盖,在原文件末尾追加
    <:从标准输入设备键盘输入

6、管道符:|
    将一个进程的输出作为另一个进程的输入

7、%:作业控制,提示符等
     $ :取某一列的值,取变量值等

8、创建文件:touch filename    不存在就新创,存在则修改
     创建目录:mkdir [-p] directory_name    -p 目录不存在则创建
     删除文件:rm ~~ -i(询问是否删除)  -f 强制删除
     删除目录:rmdir ~~  -r(删除非空目录)  -i(询问)

9、拷贝目录:    
    cp -r ~原~   ~目~

10、文件目录权限
    chmod 修改文件目录的访问权限  字母(u\g\o\a = r\w\x) 数字八进制表示
    
    chown 更改某个文件或目录的属主和属组,可用于授权

    chgrp  改动文件或目录所属的组

11、文件目录查找
    find   
    locate

12、grep
    查找包含某些字符串的结果,对文件或输出结果进行过滤,大小写敏感    -i 忽略大小写    -v反向匹配

13、wc
    统计文件或输出结果    -i  统计多少行    -w统计多少个单词    -c统计多少个字符

14、du  显示磁盘使用摘要信息
       df   显示整个文件系统的空间使用磁盘情况

15、编译过程:
    -c    只编译不连接,生成目标文件.o
    -S    只编译不汇编,生成汇编代码
    -E    只预编译
    -g    包含调试信息
    -o file       指定目标输出文件
    -I  dir    搜索头文件路径

16、静态链接库和动态链接库
    .a[libname.a]
    .so[libname.so.[主版本号.次版本号发行号.]]

    -static     静态链接
    -shared    生成动态库文件,进行动态编译
    -L  dir    库文件搜索中添加路径
    -f  PIC    生成使用相对位置无关的目标代码

17、编译静态链接库
    1、先生成目标文件.o
    2、ar crv [*.a]  [*.o]

18、调用静态链接库
    gcc -o  [file]  [file.c]  -L. [file.a]

19、编译动态链接库
    1、生成位置无关的目标代码  gcc -fPIC  -c  [*.c]
    2、gcc -shared -o [*.so]  [*.o]

20、调用动态链接库
    gcc -o  [fle]  [file.c]  -L.  [file.so]

21、gdb:调试工具

*22、makefile 的编写
    targets(目标)  :prerequistes(依赖)
        command(命令)

*23、Autotools
    autoscan----aclocal----autoconf---- [autoheader]----automake
    

    

其它阶段会后续更新!!!加油(捂脸)

猜你喜欢

转载自www.cnblogs.com/Yu-Weijie/p/11094761.html