编程经验1

Posted on 2013-07-12 10:19  tongchuhuozhai  阅读(991)  评论(2编辑  收藏  举报

1. 实现listView, scroolView的iphone风格的边缘拖动效果:
滚动视图ScrollView与ListView是两个平级视图, 在拖动超出边界时, 都会调用View的overScrollBy()方法, 这个方法设置了纵向滚动的上限为0, 如果不设置这个上限, Listview就会从顶部拖动下来. 第二个问题, 回滚动画如何改, 对于ScrollView, 这个android已经做好了, 对于ListView, 涉及到抬起时的速度, 在onTouchEvent()方法中, 如果速度为0, 会走TOUCH_MODE_OVERSCROLL模式, 如果速度不为0, 会走TOUCH_MODE_SCROLL模式, 速度为0时, 是好的, 速度不为0时, 会走到TOUCH_MODE_SCROLL模式中的另一个判断分支, 把这个判断分支改成需要的滚动动画, 即TOUCH_MODE_OVERSCROLL部分的代码搬过来.
ListView中的mEdgeGlowTop 是边缘效果动画, 把draw方法直接返回, 由此去掉边缘模糊效果.

2. 框架层分开资源
将res/res/values/public.xml中的相应组里面, 按数字递增添加资源项, 然后make update-api, 之后在应用中@android:drawable/id来引用新加资源. 对于分开资源的提交, 要将make update-api生成的current.txt提交上.


3. 帐户问题
添加帐户的服务在manifest.xml中要有
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticatora" />
authenticatora.xml文件中账户名字必须与服务代码中帐户名字相同. 否则报进程id错误.
如果两个服务添加了相名的账户, 也会报进程id错误.
服务调用AccountManager的addAccount.
把添加帐户的服务做一个独立的应用的好处是, 如果把这个任务放在通讯录中, 每次push通讯录时, 就要重启手机, 才能添加sim卡帐户, 在某个应用中, 如果找不到添加帐户的时机, 就把这个放在独立的应用中, 可以解决不必重启就可验证.

4. scroolView的fillViewport
android:fillViewport="true" 如果android:layout_height设置为具体的高度或撑满, 则scroolview中只能显示一个view.

如果scroolView中只有一个view, 这个view要撑满整个scroolView, 只将这个view设置不match_parent, 是不够的, 还要将fillViewport属性设置为true.

5. 电话拨号盘的翻转动画,
先翻转90度, 动画结束时调用监听动画结束的监听器, 该监听器将已经翻转的view1设为隐藏, 把将要显示的view2设为可见, 然后对view2翻转90度, 在view2的动画结束监听器中要将view1与view2都旋转到0度, 这样下次可以正常显示. 并且对界面进行状态更新.

6. 对话框与提示对话框
对话框为Dialog类, 提示对话框为AlertDialog.
Dialog类可以设置为占满整个屏幕. 代码简洁明了:
dialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar);

View v = LayoutInflater.from(context).inflate(R.layout.device_dialog, null);
((TextView)v.findViewById(R.id.device_number)).setText(deviceId.toString()); // deviceId.toString());

dialog.setContentView(v, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));

dialog.show();
可以设置标志来设置触摸方式等.


7. git pull(或git push)时, 出现输入密码问题
有一个原因是运行了ssh-keygen, 覆盖了原有的认证文件id_rsa.pub, 即服务器不认这个认证文件, 所以要找回原有的认证, 还好, 在gitolite/keydir目录有这个认证文件, 把这个文件覆盖认证文件id_rsa.pub, 这时输入密码, 就可正常从服务器下载代码了, 但还有个问题, 每次要输入密码, 这是因为认证文件比服务器上的新, 即然可以正常提交到服务器, 加一个gitolite-admin的管理用户ligang, 在ligang这个用户上, 改变gitserver用户的认证文件,

8. 管理用户最好不要只用一个, 万一那个挂了, 就不好恢复了, 所以最好用两个管理用户. 即:
repo gitolite-admin
RW+ = gitserver ligang

9. ListView属性
ListView滚动条放在外侧, android:scrollbarStyle="outsideOverlay"
拖动时, 上方无分隔线: android:divider="@null"

10.显示信息的多用
Intent.ACTION_VIEW,
然后putextra格式化数据,找到目标intent

11.ListView加footerview
如果加一两次footerview,则第一次加的footerview是不可见的。


12.列表项的分组栏
  设计思路:每个列表项视图都有一个分组栏,如果该列表项是首字母相同的一组列表项中的第一项,就将该分组栏显示出来,如果不是第一项,就将分组栏隐藏。所以我们的目标就演变为bindView中的position所指定的那个数据项是否为首字母相同的一组列表项中的第一项。
  为了上面这个判断,就有字母索引类。字母索引类中有一个字母索引数组,那么现在有两个数组,一个字母索引数组, 一个是列表数组,两个数组存在对应关系,即列表数组中的首字母相同的多个元素对应字母索引数组中的一个元素,即多对一的对应关系,由于最终目的是为了确定分组栏在列表中出现的位置,所以这个对应关系就应是一种位置对应关系,即列表数组的元素的位置与字母索引数组中元素的位置的对应关系,列表数组的元素的位置用position表示,字母索引数组中元素的位置用section表示,字母索引类提供了两个重要的方法,
1:输入数据数组中数据项的位置positon, 可返回索引数组中索引项的位置section, 方法名为getSectionForPosition();
2: 输入索引数组中索引项的位置section,可返回数据数组中数据项的位置position, 方法名为getPositionForSection(),注意这里position是数据数组中首字母相同的那一组数据中的第一数据的位置。
我们的目标就是在bindView中判断当前数组项的position是不是让分组栏显现出来,由于是多对一的关系,如果position对的section所对应的position1与postion相等,则该position的view就可让分组栏显示出来。

ContactsSectionIndexer()构造方法中, 
counts[]数组中的第i元素的值是以首字母相同为一组的分隔方法的第i组中成员的个数。

13 由数字获取字符串
String.valueOf

14 日志的重要
代码最好打上有价值的日志,一是为了今后查找容易。
例如Listview因为没有找上日志,之后查找很不方便。
zhuo而不群

15 framework-res
framework资源编译问题,res编过之后,要在res模块下,要mm snod, 并且相应的模块也要mm snod编进映像文件,如policy使用该资源,则在policy下mm snod.

16 提交新库
  由于从google或高通下来的代码是190多个仓库的集合,这190多个仓库的每个仓库下都有一个.gitigore文件,这些都是生成文件,不应把生成文件下到本地,如果把生成文件下到本地,会影响make编译,所以不能所已经编译过的版本提交,万全之策就是,把.repo目录,.git目录,.gitignore文件都删除掉,然后把vendor目录需要添加进来的文件拷进来,这时,不要编译,提交就可以了。这时不会有生成文件。
  被版本提交后,不要立即发布,即不要告诉同事下载,先自己下载下来,然后编译,看能否通过,不能过就要自己改好提交,直到通过再发布,不能把可能有错误的版本发布。
  
17 编译开关项问题
高通把代码放在vendor目录下,这些vendor下的模块目录是否能被编译到android工程下的build/core/buildplus/namespace/name.ini的开关项决定的,编译时出错,没有找到的目录文件,应该把相关的编译开关关掉,那么如何找到这个编译开关呢,到build目录下,在所有文件中搜索编译时找不到的那个目录名。这次新的基线一直没编过,就是因为阿拉伯语的那个模块编译开关问题。像高通这样的公司发布出来的代码不应出现编不过的问题,如果编不过,最多也是编译开关的问题。这个要确信的。这个要信的。有这个信的基础,就能把握好思考的方向。

18 把文件保存到网络的博客上,自己的计算机是不可靠的,总会有意外的问题,以前在学校里,在工作中写的文档,没有保存到网络上的,基本都丢失了。

19 apt-get
查询可以用apt已安装或可以安装但未能安装的软件,命令为:
sudo apt-cache search vim

20 把U盘制作成启动U盘或启动光盘
1).在系统->系统管理->启动盘创建 即可创建启动U盘,
2).用unetbootin命令创建启动光盘,英文名叫LiveCD. 可理解为模拟光盘。 unetbootin会弹出图形界面。
虽然启动U盘与启动光盘都可以试用Ubuntu系统,即不安装即可使用,但区别在于,如果原系统的文件系统已经破坏,启动u盘是无法进入试用系统的,但启动光盘可以。昨天遇到一个问题,在ubuntu系统关机过程中,掉电,导致linux文件系统被破坏,解决办法:进入ubuntu试用系统,修复文件系统。

21 检查并修复文件系统
e2fsck是ext2 filesystem check的简写,不过功能被扩展了,即检查并修复ext2,或ext3文件系统的硬盘分区。 关机过程中掉电,文件系统被破坏,可以用此命令修复,命令如下:
先用sudo fdisk -l 找到需要修复的硬盘分区,在这里为/dev/sda7
再用sudo e2fsck -f -y -v /dev/sda7 来修复这个文件系统。

22

与启动光盘的区别是

windowsPE, LinuxPE


23 查找android代码
在AndroidManifest.xml 中找比较合适

24 代码中调整布局
代码中的布局类型应是该view所在容器的布局类型

25 弹出9格数字输入键盘
android:inputType="phone"


很多时间在查找上。如果不集中精力,找的感觉很不好

26 如何从技术上提升智慧
技术理解透的标准是,演讲能让外行人也能理解听明白技术的思想,这需要一技术功底深厚,这需要做技术时,看代码时,能看到作者的意图,从更全局的范围来看,能看出整体思想,二是文学功底深厚, 这要求在学校中,在10几岁到20几岁努力提高文学功底,能过写真情实感的文章,提高对文字的运用能力,技术的真正提高就是智慧的提高,包括领悟力,文字运用能力,技术对思维的锻炼是很好的机会。去高通培训时,看看人家对文字的运用,这些简短有力的话记下来,以后自己也经常说这样的话:
常见的场景
非常的细致
重点给大家握一下
了解个大概
比较大的帮助
客户有个初步的分析
基本流程
技术实力大有长进
通过解问题把问题理解透
QMI是AT的改进
五六年前就有这个东西了
对外界打交道就要做个接口
新的feature
信息头,信息尾,检验合, 这种计算效率比较低
没有关系, 完全独立

电脑与USB连接在一起, 一种是AT, 一种是QMI, 把DataCore建立起来,
这个是背景

架构:
做完之后,返回一个回应
基本模型

第一代手工编解码
服务越来越多,
很多中间层抽象出来
所有的全部封装好
改的太大,总有一个die代的过程,
有个风险
已经稳定了,不想再重构
旧的代码已经稳定了,就用不新架构了,新的代码可以用新架构。
生成的方式不同,但最终发出的东西都一样
从目前得到的客户需求,
风险的话,08年09年都是手工编解码
看消息的个数
dataservice与内核打交道,就用特别的模块来控制
不同的服务用不同的路过去

根据id,最终决定调哪个接口
不会有取代的关系
现有的,稳定的就不动了
需要串行,处理一个后,才能处理下一个,如果并行,modem有消息个数的上限,
如果某个事情处理的慢,就开个线程,否则后面的就走不动了

qcril不做具体的事情,只是消息的分发,根据表,派发到哪个函数,最后调用一个真正干活的函数
(看到妙相,不能认真,一律不往心里去,前生与今生都是梦)

底层是完全异步的,上层通过逻辑可以是同步,也可以是异步

看几个线程
init_thread, 有个保护的作用,初始化失败,打电话那边什么都做不了,所以初始化失败,init_thread每隔5秒再重新初始化,直到成功。

flow_control 流控,命令之间串行。如果命令个数超出flow_control的缓存上限,底层直接返回超出错误

如果串行,那怎么串
如果存在这样的需求,设计也应满足这个需求,qcril为了满足很多需求,已经设计的很复杂了。

继续往后走
QMUX SERVER, 起几个socket,socket连好之后,就可以发消息了,
qmi_core_init完成各个server的回调注册,上电后,就必须完成这个回调注册的初始化,如果基本的没完成,后面斥不用谈了

回调函数即是事件的入口函数,注册回调函数就是配置入口函数,每个服务都响应一些事件的,所以都有回调函数。
核心内容,上电之后,注册回调函数


框架不做具体的事情,来一个事件,调用回调函数去做具体的事情,这样看代码会更明了

Log: 看什么样的关键字,卡到哪里,哪里失败。
这个大的流程,是个总提纲,包括很多流程

通过看Log看流程状态是如何切换过来的,流程的变迁。
看pdu, 每个消息都能有个字段,

做完这一切,poweroff就完成了, UI那边也会有显示

ril是有很多状态,搜一下关键字,就能知道状态如何切换的

码流:qcril发出的消息送到qmi通道,在这个通道中,消息就是码流了,即一串十六进数,通过规格说明书,一个一个去对,就能手工解码出码流的字符串,高通的看日志工具QDXM可以自动解码,左边是十六进制码流,右边是解出来的字符串。

一对就知道了
解码时,还有大小端问题,
导致。。。。
RPC也是这么干的
大量消息用idl生成,idl生成消息的.c与.h文件, idl类似于xml的脚本,消息进入qmi通道,在通道中,即是码流,码流是十六进数,QDXM工具即可解码,将将十六进制数解析为字符串。

思路的原型可称为思想,讲要讲出思想来,若讲不出思想,就等于没掌握,没领悟,句子要短,这两个要求技术功底深厚, 文字功底深厚,把它说出来,就等于把它给破了。
要讲话,就要讲出为什么,眼睛要看观众,古代文hao,出口成zhang.

工作量在这里,
不跟上基线
50的基线,我们没有充分测过。

果里含藏着因

若配错,导致后面的脚本错误,但keng定能打电话,稳不稳定,我不能说。
一上

1x, evdo 掉到1x时,1x上网时,就上不了电话。
一个modem不能两个同时都做。
这个流程很细,用到的时候再来查
qmi是共用的模块,非常简单的描述。

AP这边,有很多码流


27 eclipse
若在文件夹中删除文件夹,则eclipse打不开
一微尘有一佛刹,特斯拉也说一小部分就有yuzhou的全部信息。

28 listview: 使顶部滑动时,无间隔
android:clipToPadding="false"

29 dalvik
android的java还是不同于常规意义上的java,原因是两者的虚拟机不一样,dalvik虚拟机基于寄存器,运行文件是dex格式的, java虚拟机基于栈,运行文件是class格式的。android工程编译过程为java代码经过常规java工具编译成class格式字节码文件, 然后由dex格式文件转换为dex格式文件,资源文件由aapt工具编译,最后将dex文件与aapt编译后的文件合成apk包,zogate进程为应用fork一个进程,zogate进程由init启动,是和ril进程一样都属于用户进程。


30 eclipse
若一个eclipse工程的.project等配置文件被删除,则启动重启eclipse后,

31 android对程序的效率有更高的要求
配置在高的手机也没有一个普通电脑速度快,在嵌入式机器上编程,对程序的效率有更高的要求,尽量少分配对象,尽量不能成员变量,不用getter方法,

32 user版本
user版本,在adb shell下,不能浏览目录,也不能adb push文件。

委托他人办事之前,自己必须先把信息搜集好,把事情的各方面信息向委托人都交待清楚。

一个充分而简短的说明。

 

 

33 unetbootin
unetbootin 弹出界面, 选发布版本, 这个与当前用的系统有关, 如果当前是10.04, 则只能有10.04,(选10.04 Live , live表光盘) 如果当前是11.04, 则有11.04, 在文件系统需要修复的情况下,10.04版不能使用试用版本. 11.04可以. 对于修复文件, 要试用当前系统必须是11.04, iso选11.04的, 这样才可试用引用系统.

34 版本稳定
ubuntu, 10.04, 11.04是稳定版本, 11.10, 12.04是不稳定版本


35 sysfs
是专门描述设备的文件系统, 在系统启动之后, 建立在内存中, 有类, 总线等组织方式, 基本的类是kobject, 其他的设备类都要继承这个类, C语言通过包含来实现继承关系

 

36 分别32位与64位
四核机器一定是64位的, 64位机可以装32位系统,
$getconf LONG_BIT 是看32位还是64位.

37 android整个断点调试
断点可以看到函数栈调用情况, 变量中的值, 可以省去很多Log, 不用打那么多log, 看变量的值.
在eclipse, 进ddms, 菜单 run->debug configurations (看清了, 是debug configuraton, 不是 run configuration)->remote java application . 端口选8700. apply, 关闭对话框, 光标选在要调试的进程, 按F11. 即可, 一次只能调试一个进程.
颜色设置在 选项中过滤出color, 在text editors -> annotations 节点的右边. debug current instruction pointer 和 debug in stack .
可以把可个android, 框架层的代码调用关系都能找到, 找到其根源zygoteinit.main(), 最开始的调用处, 省去很多查找.
不行就把机器重启一下
可以调试sytem process , 如电源键响应phonewindowManager中设断点

学道之人

<我想让开发者看到什么>
新闻是统治者让我特意看到的, 看了之后, 心智受影响,


38 硬件
大电流问题, 拥入耳机发生大电流,
高通的配置很好, 1.2G 而市面上1G,
看哪芯片短路, 边看原理, 把关注的点成白色的, 然后用万用表量看是否短路


39 好程序
不出现异常, 进入时间短, 占用内存小

40 使用高通平台的chang商
华为, 联通, 都用高通7625a, 占据低端市场.
天宇出货8225a,
高通有很多chang商, 小mi,

8260是s3系列的!45NM技术!A8架构.双核1.2-1.5GHZ!GPU是220的!代表作是小米M1.1.5GHZ
8225是高通最新s4系列的产品!高通S4骁龙总共四种处理器!而8225是作为这个系列的低端产品诞生的!采用的也是45NM技术!其他三种都是28NM技术!A5架构!性能低于A8的!双核1GHZ的性能.GPU203的!代表作北斗星小辣椒!未上市!
从这些高通官网公布的数据显示!8225没有任何性能高于8260处理器!虽然是S4系列!但是是作为入门级处理器诞生的!目的是抢占低端市场!现阶段根本算不上主流!

8260是高端机用的芯片,比如htc one x,lumia920用的都是8x60的芯片,区别只是支持的网络不同而已,
a8架构:
ARM公司日前发布最新的Cortex-A8处理器,它将给消费和低功耗移动产品带来重大变革,使得最终用户可以享受到更高水准的娱乐和创新。在于美国加州举行的第二届ARM开发者年度大会上发布的ARM Cortex-A8处理器最高能达到2000DMIPS,使它成为运行多通道视频、音频和游戏应用的要求越来越高的消费产品的最佳选择。在65纳米工艺下,ARM Cortex-A8处理器的功耗不到300毫瓦,能够提供业界领先的性能和功耗效率。ARM Cortex-A8处理器第一次为低费用、高容量的产品带来了台式机级别的性能。 支持智能能源管理(Intelligent Energy Manger,IEM)技术的ARM Artisan库以及先进的泄漏控制技术使得Cortex-A8处理器实现了非凡的速度和功耗效率。Cortex-A8处理器得到了大量ARM技术的支持,从而能够实现快速的系统设计。

应熟悉智能手机的芯片商,

41 示例query
queryHandler.startQuery(1, null, Phone.CONTENT_URI, PROJECTION_PHONE, "REPLACE(" + Phone.NUMBER + ", '-', '') LIKE '%" + mDigits.getText().toString() + "%'", null, null);


42 双系统安装
开始可选英文安装, 可避免上网下载,
如果把双系统中的ubuntu替代, 将Linux盘都格式化, 再安, 还是出问题.

43 netubootin
有Linux版, 和windows盘, 都是将u盘制作为启动光盘

44 bootloader
台式机bootloader为grub, 高通平台bootloader为lk, bootloader和kernel 编译后, 和并为境像文件boot.img, 只有4M多, 而操作系统system.img.ext4 有150M

45 hal
google应硬件厂商不公开硬件厂商驱动代码的要求, 设计了hal,

46 sdcard资源文件特殊名目录

sdcard卡上ringtonge在设置来电铃声列表里就可看到, 同理闹钟铃声在sdcard卡的alarms目录, 通知铃声在sdcard卡的notifications目录


联通上网比较快的.

限你一小时把问题解完

 

限你一小时写一篇技术总结文章

47 建造者设计模式


48 通讯录
模式 : 列表有很多模式

49 个人电脑问题
开机时, 如果没有di的一声, 说明内存chao老化, 插另一个内存chao即可, 如果有di的一声, 但是屏幕一直黑屏或提示readerror, 说明硬盘没有插好, 机箱最好不要插新硬盘, 有时使接口不稳定, 保存到个人电脑或U盘的东西都是靠不住的, 三年研究生做的ppt都没了, 就说明了这点, 只有那些保存在网上的还在. 一个是网易的网盘中, 一个cnblogs博客中. 个人写总结, 尽量用简单的记事本, 最有价值的就是自己写下的这一行一行文字, 多写, 写的越多, 长进越大, 一开始只有一个小的想法, 随着写的越来越多, 想法会越来越成熟, 以前写binder的时候, 写状态栏的


另外从风水学角度来说,床头最好别挂字,背着字,走背字!

50 每天发一版本软件, 以后出现问题, 不容易排查出哪个版本出现开始出现问题.


51 sysfs

52 linux c 要点
为了避免溢出, 要用UL为单位, U表示无符号, 比有符号绝对值大二倍
?: 这样的判断比if then else, 由编译器产生更优化的代码
在宏中,要把各参数小心的括起来, 以防止


53 gitolite
对于用户的认证文件用专门的仓库管理。

54 高通不识卡的原因: nv 里面的 efs , 那两个文件删除掉这两个文件, 就可识卡。 这不识卡问题纠结了好几天


外lian一层pi, 内lian一口气,

55 kmalloc
kmalloc 分配连接的空间, kmalloc基于以而为单位的slab机制, 虽然slab以页为单位组织, 而kmalloc单位是字节.
get_free_pages() 也分配连续的空间, 以页为单位.

linux gcc 中的sleep()传入的是秒,usleep()传入的微秒。

56 __user
xxxx 会去调用 __xxxx
//他方之石
一般有几种情况要分开写
1、
xxxx 是统一的接口,而__xxxx 是具体cpu架构下的实现,很可能有多个__xxxx,当然最终只有一个__xxxx被编译

2、xxxx 检验一下参数或加保护后调__xxxx ,这类似一种编码习惯,能减少bug

3、xxxx的参数或返回值有有更改,为了低版本的代码不用修改,实现一个__xxxx做过渡。

没有定发,也没有什么难度,看代码就知道了
//他方之石结束

57 lk
stage1 用汇编做一些cpu, 中断初始化,准备好一个基本的环境,最后bl到C语言的kmain入口函数,
做硬件初始化, 准备ram空间, 设置堆栈, 转入stage2 入口
stage2 即kmain做线种,板子的初始化, 最后线程idle.
检测内存映射, 把映像文件从flash拷到内存, 设置内核启动参数


58 arm
c13是堆栈指针寄存器,即调用函数时,要把参数堆栈到一块空间,c13存放的就是该空间的地址
c14是链接寄存器,在调用函数时,将当前指令地址存到这个地址中,当函数结束后,从链接取出之前存放地址,继续向下执行
c15被叫做程序计数器,存放下一条指令的地址。
cpsr为current program status register, 即当前程序状态寄存器

一定要尽可能多的写, 不能等想成熟了再写,否则会失去很多领悟力的锻炼时间,you其在比较吵乱的环境中, 写可以把精力集中. 写即是领悟的过程, 技术以后若没用到,但依此锻炼的文字能力和领悟力的锻炼,是无时不ke的受用, 刚才感觉了一下, 只有自己亲手写下来的文字,之后才能回忆其含义时,可以很清晰, 有种保证说出来的绝对正确的感觉.

想起一句就写一句, 想起两句就写两句, 不能等, 等会等没的.
忍他,让他,避他, 几十年后,你再看他.

我得感谢他, 让他有了学习bootloader的勇气.

要想写的好, 写的更让人读的明白chang快, 就要把语法淡忘, 还要适当的重复,
写作, 收获就在当下.

一条arm指令, 对应的机器码, 就是32位二进制数, 这32位中, 划分为几个部分, 表示指令的, 表示源寄存器的, 表示目标寄存器的, 表示操作数的.

59 sysfs
proc 是专门为进程使用的设备信息, 由于设计上不如sysfs清晰, 在设备驱动上, 被sysfs taotai
sysfs 把设备和总线组织成文件, 这些文件可以被用户空间读和写, 看一个原理, 先从它的对外特性来看, 即它的使用场合, 或者说它是怎么被使用的, 把这个道理应用到这里, 就是看/sys这个目录,

8000年后, 这个世界的人类就要被毁灭,
当年, 菩萨的因地修行时, 处在幻境时, 也是感到一样的真实, 真实度一样这么高.

bootloader 作用就是加载操作系统, 从硬盘加载到内存.
arm中指令加载, 即ldr, 指把数据从内存拷到寄存器, 相反即存储, 即str, 从寄存器到内存

60 分区出错
android工程中, /system/vold/cryptf.c 中如果分区损坏, 则写入将vold.encrypt_progress写为error_partially_encrypted,

61 Linux用户空间的api
这些api用man可查看, 驱动用的像request_irq用man查不到.
wine上的soureinsight和windows下的一样好用. vi的好处可能就sheng下远程登录
snprintf(指针, 字符个数n, "格式化的字符串", 可变参数1...) 把第三个参数的字符串拷到指针指向的内存区域, 字符个数包括了字符串结束符'\0', 即格式化字符串的前n-1个拷过去, 示例:
char n1[100];
snprintf(n1, 15, "abc%d%s", 1, "efg");
printf("\n n1 : %s \n", n1);
运行结果为: abc1efg

写作真到集中精力.
62 goole搜索不同百度搜索之外
google可搜索文件类型, 如snprintf.c filetype:c

 63 ext4文件系统, 恢复被rm删除的文件
1. $sudo aptitude install e2fsprogs e2fslibs-dev
2. 安装extundelete,
3. $extundelete /dev/sda3 --restore-all , 把要恢复好的放在当前目录下, 并不是所有都能恢复
如果ext3被格式化成windows下的文件系统, 则不能恢复. 在windows

64 qcril
solited是应用层发起, unsolieted是modeme发起
android系统包括内核空间, c用户空间(如rild进程), Java用户空间(如框架层, )
ril基本框架在hardwareh目录下, , 而
手机分为android侧, modem侧, 每一侧各占一个cpu,

形容封装的好, 封装的很好, 两行代码就能调用远程功能

65 qpst 烧modem
菜单start clinent -> 选download -> 选multi-image(第四个标签) -> 选发布版的modem目录.  点download

66 右键解压不了的, 用tar zxvf 可以解压好