黑盒理论:入门视频中几乎全部是以“普通用户”的方式去教大家,这表明目前学习状态只需要学会使用,熟练操作即可。
需要额外介绍和理解的概念
1 交叉编译的概念和相关知识
在PC上编译,在嵌入式设备上运行,从操作系统编译到应用都是这样。
应用X86和ARM编译举例:
gcc -o hello hello.c file hello ./hello
arm-none-gcc... -o hello hello.c file hello
系统源码编译:
uboot、kernel以及qt文件系统也是需要arm编译器;
Android源码的编译器是gcc和jdk,它和交叉编译器无关,另外还有NDK编译器;
android系统下也有一些基础的linux命令,这些命令可以通过工具来扩展,这些是通过交叉编译器来实现的。
4412上的android系统是32位还是64位的?
android4.4版本是不区分32位和64位,从gcc编译器来看,应该是64位的。
为什么4412是32位,可以运行android的64位呢?linux系统有虚拟文件系统,是这个功能实现跨文件系统。
2 linux命令和配置文件(环境变量)
linux思想来理解部分内容
1 一切皆文件;2 文本形式保存配置文件;3 提供机制而非策略;4 尽可能避免和用户交互
6 单一目的的小程序;6 组合小程序完成复杂任务
大部分命令都在/bin目录下
linu命令是什么-本质是小程序。
增加一个例子:实现简单的myecho。
1 在当前目录下测试可以运行;
2 放到/bin目录下,全部可以运行;
3 添加/home/test(echo $PATH ;export PATH=$PATH:/home/test)路径到环境变量下,
/bin目录下的myecho删除(注意不要删错),可以运行。
3 内核编译常见问题:自己编译内核镜像之后为什么烧写之后,启动之后会有报错
需要使用cp命令配置内核!.config文件可以看做编译时候使用的工具。
.config中全部是宏定义--C语言中使用宏定义实现预处理
类似这样的代码:
#if xxx
#define xxx
...
#endif
或者
#if xx
...
#elif xx
...
#
其中的...不仅表示具体的代码,还有 编译脚本文件中 的 编译源码代码。
这部分需要先严格按照用户手册中的配置说明,先配置缺省文件,然后再编译kernel镜像。
4 emmc中的uboot坏了之后系统如何启动?
用户手册和视频教程上有介绍如何具体操作。
几乎所有的处理器都可以设置启动模式,
4412芯片内部有一段代码,通过设置一些IO(拨码开关)的电平,实现这段代码最终跳转到mmc还是tf卡。
myecho.c源码
#include <stdio.h>
void main(char argc,char *argv[])
{
while(--argc){
printf("%s",argv[argc]);
}
printf("\n");
}