新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
dd :用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的沧县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
注意:指定数字的地方若以下列字符结尾,则乘以相应的数字: b=512 ; c=1 ; k=1024 ; w=2
参数注释:
4、备份与恢复MBR
·备份文件开始的512个字节大小的MBR信息到指定文件:
#dd if=/system/xbin/busybox of=/data/local/tmp/bb count=1 bs=512
· count=1 指仅拷贝一个块; bs=512 指块大小为512个字节
·恢复:
#dd if=/data/local/tmp/bb of=/data/local/tmp/bbb
·将备份的MBR信息写到磁盘开始部分
/dev/null ,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero ,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供 0 ,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串 0 。
/dev/null ——它是空设备,也称为位桶( bit bucket )。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
am指令是 activity manager的缩写,可以启动Service、Broadcast,杀进程,监控等功能,这些功能都非常便捷调试程序。
可以通过adb shell 进入Android 的Linux命令界面,输入am -help查看详细命令,先介绍几个简单用法,
命令格式如下
命令列表:
原理分析:am命令实的实现方式在Am.java,最终几乎都是调用ActivityManagerService相应的方法来完成的,am monitor除外。比如前面概述中介绍的命令am start -a android.intent.action.VIEW -d , 启动Acitivty最终调用的是ActivityManagerService类的startActivityAsUser()方法来完成的。再比如am kill-all命令,最终的实现工作是由ActivityManagerService的killBackgroundProcesses()方法完成的。
下面说一下[options]和 INTENT参数的意义以及如何正确取值。
主要是启动Activity命令am start [options] INTENT使用options参数,接下来列举Activity命令的[options]参数:
启动Activity的实现原理: 存在-W参数则调用startActivityAndWait()方法来运行,否则startActivityAsUser()。
命令
例如: 向pid=12345的进程,发出level=RUNNING_LOW的收紧内存命令
level取值范围为: HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
am的子命令,startservice, stopservice, broadcast, kill, profile start, profile stop, dumpheap的可选参数都允许设置--user USER_ID。目前市面上的绝大多数手机还是单用户模式,因此可以忽略该参数,默认为当前用户。
例如:启动id=10001的用户的指定service。
Intent的参数和flags较多,为了方便,这里分为3种类型参数,常用参数,Extra参数,Flags参数
实例
(1). 基本类型
参数es是Extra String首字母简称,实例:
(2). 数组类型
参数eia,是Extra int array首字母简称,多个value值之间以逗号隔开,实例:
(3). ArrayList类型
参数efal,是Extra float Array List首字母简称,多个value值之间以逗号隔开,实例:
pm工具为包管理(package manager)的简称,可以使用pm工具来执行应用的安装和查询应用宝的信息、系统权限、控制应用,pm工具是Android开发与测试过程中必不可少的工具,shell命令格式如下:
原理分析:pm命令实的实现方式在Pm.java,最后大多数都是调用PackageManagerService相应的方法来完成的。disbale之后,在桌面和应用程序列表里边都看到不该app。
查看所有的package,
[options]参数:
disabled + enabled = 总应用个数; 系统 + 第三方 = 总应用个数。
查看第3方应用:
查看已经被禁用的包名
FILTER参数
当FILTER为不为空时,则只会输出包名带有FILTER字段的应用;当FILTER为空时,则默认显示所有满足条件的应用。
例如,查看包名带有weather字段的包名
[options]参数:
PATH参数: 指的是需要安装的apk所在的路径
dumpsys是Android自带的强大debug工具,从名字就可以看出,主要是用于dump 当前android system的一些信息,是一项分析手机问题,运行状态,使用情况等十分有效的手段。
实现原理
dumpsys的源码结构其实很简单,只有一个dumpsys.cpp
/frameworks/native/cmds/dumpsys/dumpsys.cpp
先通过defaultServiceManager()函数获得ServiceManager对象,然后根据dumpsys传进来的参数通过函数checkService来找到具体的service, 并执行该service的dump方法,达到dump service的目的。
不同的Android系统版本支持的命令有所不同,可通过下面命令查看当前手机所支持的dump服务,先进入adb shell,再执行如下命令:dumpsys -l。 这些服务名可能并看不出其调用的哪个服务,可以通过下面指令:service list。
服务列表有很多,这里简单介绍几种
通过下面命令可打印具体某一项服务:dumpsys service,其中service便是前面表格中的服务名
接下来主要说下dumpsys activity 用法
命令
options可选值
dumpsys activity等价于依次输出下面7条指令:
cmd可选值
命令
返回结果
上面的输出结果可以分为以下四个部分
也可以只输出某个pid或package的进程信息:
下面以AmberLocker作为实例进行分析
场景1:查询某个App所有的Service状态
解读:Service类名为com.amber.lockscreen.LockerHeartService,包名为mobi.infolife.ezweather.locker.locker_2,baseDir(apk路径)为/data/app/mobi.infolife.ezweather.locker.locker_2-2/base.apk,dataDir((apk数据路径)
运行在进程pid=1115,进程名为进程名为mobi.infolife.ezweather.locker.locker_2,,uid=10060,还有创建时间等信息
场景2:查询某个App所有的广播状态
场景3:查询某个App所有的Activity状态
场景4:查询某个App的进程状态
格式:ProcessRecord{Hashcode pid:进程名/uid},进程pid=941,进程名为mobi.infolife.ezweather.locker.locker_2:live,uid=10060.
该进程中还有Services,Connections, Providers, Receivers,
场景5:查询栈顶Activity
dumpsys 的命令还有很多,这里就不一一列举了。
27种用法格式 :
用法说明 :
1、 pm list packages : prints all packages, optionally only those whose package name contains the text in FILTER. Options:
例子:列出系统中所有packages
2、 pm list permission-groups : prints all known permission groups.
例子:
3、 pm list permissions : prints all known permissions, optionally only those in GROUP. Options:
例子:列出系统所有许可
4、 pm list instrumentation : use to list all test packages; optionally supply to list the test packages for a particular application. Options:
-f: list the .apk file for the test package.
5、 pm list features : prints all features of the system.
例子:列出所有手机特性
6、 pm list users : prints all users on the system.
例子:
7、 pm path : print the path to the .apk of the given PACKAGE.
例子:按包名查找apk文件所在路径
8、 pm dump : print system state associated with the given PACKAGE.
9、 pm install : installs a package to the system. Options:
例子:
10、 pm uninstall : removes a package from the system. Options:
-k: keep the data and cache directories around after package removal. 保留数据
例子:
11、 pm clear : deletes all data associated with a package..
例子:只删除数据
12、 pm enable, disable, disable-user, disable-until-used : these commands change the enabled state of a given package or component (written as "package/class").
13、 pm grant, revoke : these commands either grant or revoke permissions to applications. Only optional permissions the application has declared can be granted or revoked.
14、 pm get-install-location : returns the current install location.
15、 pm set-install-location : changes the default install location.
NOTE: this is only intended for debugging; using this can cause applications to break and other undersireable behavior.
16、 pm trim-caches : trim cache files to reach the given free space.
17、 pm create-user : create a new user with the given USER_NAME, printing the new user identifier of the user. 创建新用户
18、 pm remove-user : remove the user with the given USER_IDENTIFIER, deleting all data associated with that user 。 按用户ID删除用户
1、连接电脑上,用adb打开,android命令行终端即可。
2、如果你想直接在android上打开,可以安装一个android terminal,在手机上使用linux命令行。
扩展资料:
终端命令sudo: Executing Commands with Elevated Privileges 执行命令特权 sudo是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登陆 和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的。
app_0是用户名,也就是终端在系统中的名字。android是主机名/ 表示当前路径。
这些信息存储在变量PS1中,自己可以改变。改成彩色更加美观,而且输入命令后更加容易找到提示符。有一个重要的基本变量是PATH,这叫命令搜索路径。
参考资料:安卓中文网--在手机端使用命令行刷入Recovery教程详解
建议你买本书对照着学,或者在日常生活中使用linux慢慢学习使用我常用的命令:pwd打印当前工作目录cd切换目录ssh用于连接用vi编辑用cat打印|管道符sudo提升权限chmod更改权限apt-get、yum、pacman软件包管理器rpm、dpkg、tar-zxvf等用于安装或编译软件su切换用户shutdown-hnow关机其实有很多,关键在日常使用中边用边学祝你早日熟悉linux命令!
使用eclipse进行嵌入式Linux的开发环境配置:
1、安装jdk
jdk(java development kit)即java开发包,其中包含了运行eclipse所需要的jre. ubuntu缺省安装的gnu版本的jre运行效率不高,所以需要安装sun公司的jre. 首先从sun的网站上下载安装包jdk-6u7-linux-i586.bin,然后如下进行安装:
# mkdir -p /opt/java
# ./jdk-6u7-linux-i586.bin // 执行自解压文件,生成目录
# mv jdk1.6.0_07 /opt/java // 把目录移到/opt/java下
# cd /opt/java
# ln -s jdk1.6.0_07 jdk
# mv /etc/alternatives/java /etc/alternatives/java.gnu
# ln -s /opt/java/jdk/bin/java /etc/alternatives/java
# export JAVA_HOME=/opt/java/jdk // 设置环境变量
2、安装eclipse和cdt
从eclipse网站上下载安装包eclipse-SDK-3.4-linux-gtk.tar.gz 和cdt-master-5.0.0.zip
# cd /opt
# tar zxvf eclipse-SDK-3.4-linux-gtk.tar.gz // 解压生成eclipse目录
# export PATH=/opt/eclipse:$PATH
# mkdir -p /opt/cdt
# cd /opt/cdt
# unzip cdt-master-5.0.0.zip
# cp -r plugins/* /opt/eclipse/plugins/
# cp -r features/* /opt/eclipse/features/
二、创建c/c++工程
假设已经在linux上安装好了arm交叉工具链,下面介绍如何创建、交叉编译和调试c/c++工程,进入eclipse安装路径后,运行eclipse。
创建c 工程
使用缺省的Linux GCC工具链
进入c/c++ 界面
添加源代码文件1
添加源代码文件2
编辑代码
设置工程属性,指定交叉工具链1
设置工程属性,指定交叉工具链2
设置工程属性,指定交叉工具链3
编译工程
已生成arm平台可执行代码
配置调试选项
设置Debugger和 GDB debugger选项
设置连接类型为TCP,目标板的ip地址和调试端口号。端口号任意指定,通常大于1024(避免和系统所用端口号冲突)
在开发板上运行程序,格式如上图所示:gdbserver是交叉调试辅助程序;192.168.0.150是主机的ip地址;1234是调试端口号,和eclipse调试选项里设定的端口号要一致
点击Debug,进入调试界面
执行到断点
eclipse的调试界面和操作和在windows下开发类似。
所需开发工具及环境
虚拟机Linux:Fedora 9
交叉编译工具:arm-linux-gcc-3.4.1.tar.bz2
集成开发工具:Eclipse(Linux安装包中自带的,安装Linux时选中安装)
安装ARM交叉编译器
1. 安装。其实很简单,就是将下载的arm-linux-gcc-3.4.1.tar.bz2解压到Linux根目录即可(因为解压后已经包含了/usr/local目录,所以要解压到根目录),如下命令:
tar -jxvf arm-linux-gcc-3.4.1.tar.bz2 -C /
解压后的目录/usr/local/arm/3.4.1/
2. 设置环境变量。就是把交叉编译器的路径设置到系统环境变量里面去。
echo $PATH
查看现有的环境变量
如果只想临时添加交叉编译器的环境变量(注:临时添加的系统重启或注销后又没有了),只需在命令行输入如下命令:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
如果想这个环境变量永久的添加到系统的环境变量中,则你只需把这个命令添加到/root/.bashrc文件的最后一行即可(这个文件是隐藏文件,你要在文件浏览器中单击查看菜单,勾选显示隐藏文件才能看到)
3. 测试建立的交叉编译环境。新建一个c程序,文件名:test.c, 如下:
#include stdio.h
int main(void)
{
printf("Hellow world!\n");
return 0;
}
进行交叉编译,如下:
arm-linux-gcc -o test test.c
将交叉编译好的目标文件test下载到ARM开发板中并运行,如下:
./test
输出结果为:
Hellow world!
用集成开发工具Eclipse来开发嵌入式应用程序
双击Eclipse图标启动Eclipse
设置Eclipse的工作空间,就是选个目录,单击OK
启动后的主界面
开始新建一个应用程序工程
选择新建一个C工程,单击Next
给工程取个名字,这里我就叫test_app;然后选择工程类型,我选择了个Hellow world C工程模版,单击Next
填写作者、版权等信息,单击Next
没什么选的,点击Finish
单击Yes
新建好的项目工程
展开左边的源代码目录,双击打开主函数。这里只是输出一句"Hello World!!!",你可以做一些其他复杂的应用
单击Project菜单,去掉Build Automatically的勾选,因为勾选的话,每次修改一个地方工程都会自动进行编译
打开工程的属性对话框进行编译选项的设置
我们的应用程序最终要到嵌入式arm上运行,这里就要把gcc改成arm-linux-gcc编译器,当然前提是你要在你的开发主机上先安装arm-linux-gcc
C连接器也要改成arm-linux-gcc
这里的Libraries是设置你的应用程序中用到的库文件,比如应用程序中用到了线程类,则这里在上面添加pthread这个库,下面就添加这个库的路径。如果应用程序没用到任何库文件就不用管了
选中左侧的工程名,右键,在弹出的菜单中选择Build Project编译工程
编译好后的工程,目标文件在Debug目录下