4412:学习笔记2
eMMC (Embedded Multi Media Card) 为MMC协会所订立的、主要是针对手机或平板电脑等
产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提
供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推
出产品的时间。这些特点对于希望通过缩小光刻尺寸和降低成本的NAND供应商来说,同样
的重要。
ubuntu中的 ./ 当前目录下的意思
linux找命令一般不会先从当前目录下去找,所以加个./(.代表当前目录..代表上级目录
)
何为‘脚本’
脚本,是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批
处理文件。
脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定
的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。
脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开
查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可
识别的指令,并按程序顺序执行。“因为脚本在执行时多了一道翻译的过程,所以它比二
进制程序执行效率要稍低一些。”
脚本通常可以由应用程序临时调用并执行。各类脚本被广泛地应用于网页设计中,因为脚
本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现,如动画、声
音等。举个最常见的例子,当点击网页上的Email地址时能自动调用Outlook Express或
Foxmail这类邮箱软件,就是通过脚本功能来实现的。也正因为脚本的这些特点,往往被一
些别有用心的人所利用。例如在脚本中加入一些破坏计算机系统的命令,这样当用户浏览
网页时,一旦调用这类脚本,便会使用户的系统受到攻击。所以用户应根据对所访问网页
的信任程度选择安全等级,特别是对于那些本身内容就非法的网页,更不要轻易允许使用
脚本。通过“安全设置”对话框,选择“脚本”选项下的各种设置就可以轻松实现对脚本
的禁用和启用。
ubuntu运行脚本
首先,确定你那个脚本文件的位置,比如说你放在/home/aaa/xxx.sh这里。然后打开终端
,输入cd /home/aaa/xxx.sh 回车
然后chmod +x xxx.sh 回车,
最后输入./xxx.sh 回车
如果不行,执行sudo ./xxx.sh 回车,输入root密码回车,ok
uboot kernel linux-qt 编译的关键点
1、编译器:明确每一个的编译器是什么
2、设置环境变量:有了环境变量,在编译的时候,系统才能找到编译器
3、库文件:?(搭建搭建过程中会通过脚本语言安装库文件,简单有效)
4、源码
Dynamic Linkable Library(库文件)
先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库
,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-
静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果
采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中
了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地
引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态
链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他
的动态或静态链接库。
ubuntu 的gcc
交叉编译的 arm-linux-gcc
不是一个东西
环境变量:
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的
一些参数,如:临时文件夹位置和系统文件夹位置等。
“环境变量是在操作系统中一个具有特定名字的对象”,它包含了一个或者多个应用程序
所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个
程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应
到path(环境变量的名字还有其他)中指定的路径去找。用户通过设置环境变量,来更好
的运行进程。
如果想要永久生效,需要把这些行添加到环境变量文件里。有两个文件可
选:/etc/profile 和用户主目录下的 .bashrc。
/etc/profile对系统里所有用户都有效,用户主目录下的 .bashrc 只对该用户有效。
shell和环境变量中export
登录到系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变
量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。
此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本
程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该
脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由某个
shell(称为父shell)派生的。
在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变
量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的
shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对
已定义的变量进行输出。
export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为
变量输出。
#echo $PKG_PATH 在任何时候建立的变量都只是当前shell的局部变量,所以不能被shell
运行的其他命令或shell程序所利用。
环境变量的查看和编辑方法:
1. 显示环境变量HOME
$ echo $HOME
/home/redbooks
2. 设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
Hello!
3. 使用env命令显示所有的环境变量
$ env
HOSTNAME=redbooks.safe.org
PVM_RSH=/usr/bin/rsh
Shell=/bin/bash
TERM=xterm
HISTSIZE=1000
...
4. 使用set命令显示所有本地定义的Shell变量
$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-
redhat-linux-gnu")
BASH_VERSION='2.05b.0(1)-release'
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=80
DIRSTACK=()
DISPLAY=:0.0
...
5. 使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则
该变量值将被设为NULL。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$ unset $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了
6. 使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable
环境变量的设置位于/etc/profile文件
如果需要增加新的环境变量可以添加下属行
export path=$path:/path1:/path2:/pahtN
---------------------------------------------------------------------------
--------------------------------------------
1.Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1.1 永久的:需要修改配置文件,变量永久生效。
1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。
2.设置变量的三种方法
2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且
是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此
用户时生效。
2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并
且是“永久的”。
例如:编辑guok用户目录(/home/guok)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能
在下次重进此用户时生效。
2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的
shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新
shell时就没有这个变量,需要使用的话还需要重新定义。
3.环境变量的查看
3.1 使用echo命令查看单个环境变量。例如:
echo $PATH
3.2 使用env查看所有环境变量。例如:
env
3.3 使用set查看所有本地定义的环境变量。
unset可以删除指定的环境变量。
4.常用的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 当前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
对环境变量的理解分类,配置
前言:
1. 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程;
2. 环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值;
3. 若要重复适用,则最好在.profile中定义;环境变量的使用与本地变量的使用方法相同
,
4. 但是在使用之前,必须用export命令导出。
一.Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1.永久的:需要修改配置文件,变量永久生效
2.临时的:使用export命令声明即可,变量在关闭shell时失效
二.Linux 环境变量文件
linux变量文件有/etc/environment 或 /etc/profile 或 ~/.profile 或
/etc/bash.bashrc 或 ~/.bashrc, 以及~/.bash_profile(一般是用户在自己目录下新建的
),~/.bash_logout.
1./etc/environment:是系统在登录时读取的第一个文件,用于为所有进程设置环境变量。
系统使用此文件时并不是执行此文件中的命令,而是根据而是根据KEY=VALUE模式的代码,
对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如 PATH=
$PATH:/xxx/bin的代码即可
2./etc/profile:此文件是系统登录时执行的第二个文件。 为系统的每个用户设置环境信
息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集
shell的设置。
(/etc/profile可以用于设定针对全系统所有用户的环境变量,环境变量周期是永久性)
3. ~/.profile:
对应当前登录用户的profile文件,用于定制当前用户的个人工作环境(变量是永久性)
4. /etc/bash.bashrc:是针对所有用户的bash初始化文件,在此中设定的环境变量将应用
于所有用户的shell中,此文件会在用户每次打开shell时执行一次
5.~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的
shell时,该文件被读取。(~/.bashrc只针对当前用户,变量的生命周期是永久的)
6.~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登
录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的.bashrc文件
。(如果~/目录下没有.bash_profile则新建立一个)
当一个shell关闭时,在bash_profile中定义的系统变量则会失效。因此,每打开一个新的
shell时都要运行一次source bash_profile.而且针对当前用户。
7.~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。
说明:
1.以上这几个文件的执行顺序是/etc/enviroment–>/etc/profile –>~/.profile –
>/etc/bash.bashrc–> ~/.bashrc
2.要使得刚修改的环境变量生效:source .bashrc
3.查看环境变量:env
4.使用readonly命令设置只读变量,如果使用了readonly命令的话,变量就不可以被修改
或清除了。
5.使用unset命令来清除环境变量
$ unset TEMP_KEVIN #删除环境变量TEMP_KEVIN
个人理解: 1、PATH中的目录增加需要用“:”连接
2、export 和 echo 为环境变量的两个用到的命令(还有set unset)
3、环境变量是一个特定名称的对象,有其定义的变量值,供系统全局使
用
4、变量分为暂时和永久的(对应的shell不同,存放在的文件不同)
5、环境变量立即生效需要source 命令
理解Qt
而qt则是用来开发界面程序的,类似windows下微软的mfc,至于qt只是个基于C++的界面程
序开发工具,觉得以后用到就学一下,用不到就算了。
理解gcc
linux下编译c程序必然要用到gcc编译器,你要在linux下写程序,必然的要会使用gcc对你
的程序进行编译,gcc只是一个编译器。你的意思是linux下的c/c++集成开发环境吧,
anjuta,eclipse等等都可以,但他们只是提供了开发环境,编译器还是用的gcc。
linux-c
TOP-4412开发板可以运行的文件系统很多,在具体的文件系统上实现特定功能前,可以
使用Linux-C程序来测试硬件以及驱动。而且这些程序很容易移植到Android、Qt/E以及最
小
文件系统上。
本质上,我们可以这样理解,Android 只是一个大的文
件而已,以下面第一个 helloworld 为例,Linux 内核上运行着两个程序“helloworld”+
“Android”。
文件系统
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘
)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责
管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组
成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文
件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护
和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制
文件的存取,当用户不再使用时撤销文件等。
文件的系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织
文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个
文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的
种类。
磁盘或分区和它所包括的文件系统的不同是很重要的。少数程序(包括最有理由的产生文
件系统的程序)直接对磁盘或分区的原始扇区进行操作;这可能破坏一个存在的文件系统
。大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘在作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这
个过程就叫建立文件系统。
linux中可执行文件
.c只是简单的文本文件
.o是编译之后的二进制文件
最终生成的可执行文件,是编辑--编译--链接之后的文件.
JNI(java本机接口)作用
它是Java软件开发工具箱(Java SoftwareDevelopment Kit (SDK))的一部分,JNI它提供
了若干的API,实现了和Java和其他语言的通信(主要是C&C++)。
我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在
Android上层应用中,大部分情况是不需要JNI的。
但是在嵌入式Android开发中,以下两种情况肯定需要用到JNI。
第一种情况,用户需要直接调用开发板底层中的驱动实现特定功能,那么怎么实现?因为
底层Kernel中都是用C编写的。Java是没有办法直接调用底层的,那么这种情况下就需要用
到JNI。
第二种情况,用户有现成的应用,但是都是基于C写的,那么想要尽快的完成任务,那么
就需要用到JNI。将C的程序移植到JNI中,然后制作好API接口,供上层Java的应用程序调
用。
当然,还有其它很多情况下都需要用到JNI,例如你有C写的算法,以及一些C的动态库
想直接调用等等,但是那不是属于纯粹的嵌入式Android了,这里就不详细介绍了。
Makefile include
讨论如何在一个 Makefile 中包含其它的 makefile 文件。Makefile 中包含其它文件的关
键字是“include”,和 C 语言对头文件的包含方式一致。
“include”指示符告诉 make 暂停读取当前的 Makefile,而转去读取“include”指定的
一
个或者多个文件,完成以后再继续当前 Makefile 的读取。Makefile 中指示符“include
”书写在
编译编程:就是很多变量名称(指定相关的位置),然后做成影响,安排给不同的地址。
个人理解!!
android开发环境的搭建流程及SDK安装难点
下载好Android SDK后,开始安装,
Android SDK采用了Java语言,所以需要先安装JDK 5.0及以上版本。直接下载jdk安装文件
安装,方便。
Android SDK不用安装,下载后,直接解压即可,
将下载后的SDK的压缩包解压到适当的位置,就这么简单;
SDK安装OK。
使用Eclipse进行android应用开发需要给Eclipse装adt插件,这样Eclipse就
可以和android sdk建立连接,可以在Eclipse中启动android模拟器进行程序调试等
ADT插件安装这里不再累赘,插件的安装URL为:
https://dl-ssl.google.com/android/eclipse/
也可以下载adt的zip包安装
安装完插件后,需要做一些简单的配置:
1、在Eclipse中,选择Window > Preference;
2、从左侧的菜单中,选择Android项;
3、设置SDK Location,点Browse选择SDK的安装根目录;
4、OK,完成。
SDK安装:
1、下载后双击安装,指定Android SDK的安装目录,为了方便使用Android SDK包含的开发
工具,我们在系统环境变量中的Path设置Android SDK的安装目录下的tools目录。
2、在Android SDK的安装目录下,双击“SDK Manager.exe”,打开Android SDK Manager
,Android SDK Manage负责下载或更新不同版本的SDK包,
Qt优势
Qt是一个跨平台应用程序和UI开发框架。使用Qt只需要一次性的开发应用程序,不需重
新编写源代码,便可跨不同桌面和嵌入式操作系统运行这些应用程序
在linux系统中的文件类型查询命令:file ***
!!!!个人理解!!!!!
不管用寄存器直接操作、库函数、操作系统的API编程,最终目的只有一个,就是编译出来
的文件能够被目标处理器所执行。
库函数:将对寄存器的操作封装为函数。方便使用
API:用操作系统管理硬件和寄存器等。然后根据API开发程序
配置linux内核就是利用现成已经编好的系统程序进行控制硬件,实现功能
linux 中的top命令
top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命
令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的
曲解。
本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包
括视图中各进程(任务)的字段的排序。
在linux中还有一个命令pmap,来输出进程内存的状况,可以用来分析线程堆栈:
pmap PID
应用程序如何利用多Core(有关线程)
开发人员可将可并行的代码写入线程,而这些线程会被SMP操作系统安排并发运行。
另外,Sam设想,对于必须顺序执行的代码。可以将其分为多个节点,每个节点为一个
thread.
并在节点间放置channel.节点间形如流水线。这样也可以大大增强CPU利用率。
Linux Kernel
高内聚,低耦合 Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而
为上层提供统一的服务。如果你只是做应用开发,就不需要深入了解Linux Kernel层。
Android Runtime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能 ??
Libraries(本地库)
Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android
的应用程序框架 (application framework)暴露给开发者。
Application Framework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和 新颖的应用程序。开发
者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添
加通知等等,很多很多。
Applications
Android 装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏
览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富 的应用程序
有待我们去开发!