linux ,Android基础知识总结

linux ,Android基础知识总结
linux ,Android基础知识总结

linux,Android基础知识总结

1.Android编译系统分析

2.文件系统分析

3.制作交叉工具链

4.软件编译常识

5.设置模块流程分析

6.linux系统启动流程分析

7.linux下svn使用指南

8.LFS相关

9.linux内核的初步理解

====================================================

================

android系统开发指南(常用环境的搭建和使用)

说明:

有的步骤会用到脚本简化操作,脚本通过svn服务器获取:

svn co svn://192.168.2.148/smartphone/td0901/release/images/scripts

用户名为各位的姓名拼音,密码与用户名相同

一编译android源码,制作文件系统

二ubuntu下烧录内核和文件系统

一编译android源码,制作文件系统

1.开发主线源码位置:

svn://192.168.2.148/smartphone/td0901/trunk/cupcake-jianping//cupcake源代码

svn://192.168.2.148/smartphone/td0901/trunk/linux-2.6.28-a1//内核源代码

2.打标的源代码位置

svn list svn://192.168.2.148/smartphone/td0901/tag

我们可以通过svn list svn://192.168.2.148/smartphone查看svn版本库内核

更多信息请参卡以下文档:

http://192.168.2.148/svn/smartphone/

http://192.168.2.148/svn/smartphone/智能平台开发部资料管理手册V1.0.doc

http://192.168.2.148/svn/smartphone/linux下svn操作指南及规范.doc

用户名为各位的姓名拼音,密码与用户名相同

3.编译源码

进入cupcake工作拷贝的顶层目录,执行:

../make_image15.sh

部分执行结果:

out/target/product/littleton/root/内核需要使用的initramfs

out/target/product/littleton/system文件系统的系统分区

out/target/product/littleton/data/文件系统数据分区

4.编译内核

此处内核编译主要针对驱动组之外的同事

1>设置工具链

内核的linux-2.6.28-a1/Makefile中设定了:

CROSS_COMPILE?=arm-linux-

所以设置PATH环境变量,保证能找到正确的工具链

假设工具链位于:/usr/local/marvell-arm-linux-4.1.1/设置为:

export PATH:=/usr/local/marvell-arm-linux-4.1.1/bin/:$PATH

2>更改编译选项(网络启动或者本机启动)

内核顶层目录执行:

make menuconfig

General setup--->

[*]Initial RAM filesystem and RAM disk(initramfs/initrd)support

()Initramfs source file(s)(NEW)

如果需要支持网络启动反选[]Initial RAM filesystem and RAM disk(initramfs/initrd)support

如果需要支持本地启动选中[*]Initial RAM filesystem and RAM disk(initramfs/initrd)support 设置()Initramfs source file(s)(NEW)为root

拷贝cupcake编译结果out/target/product/littleton/root/到内核顶层目录

3>编译

内核顶层目录执行make zImage

编译好的内核:

arch/arm/boot/zImage

5.搭建网络开发环境

1>安装nfs服务器

sudo apt-get install nfs-kernel-server nfs-common

2>修改nfs服务器配置文件/etc/exports,确保有以下配置项

/nfsroot/rootfs*(rw,no_root_squash,sync)

我们在内核中已经固定,手机通过网络方式启动,默认从/nfsroot/rootfs

读取文件系统,修改配置项后需要重启nfs服务器:

sudo/etc/init.d/nfs-kernel-server restart

3>配置网络根文件系统

拷贝out/target/product/littleton/root/内容到/nfsroot/rootfs目录

拷贝out/target/product/littleton/system内容到/nfsroot/rootfs/system

修改/nfsroot/rootfs/init.rc去掉几个mount命令

为了使大家的过程,结果统一,可以使用脚本mkfs.cupcake完成

在执行mkfs.cupcake.nfs脚本前先到cupcake-jianping目录下执行:../make_env15.sh设置环境变量,

获取通过手动输入android源码的位置,让脚本来设置环境变量。

二ubuntu下烧录内核和文件系统

1.硬件:

手机一台

usb转串口线一根

usb转网卡线一根

2.软件环境

1>tftp服务器

执行脚本:setup_tftpd.sh安装和配置tftp服务器,我们默认以/tftpboot

为tftp服务器的根目录,需要下载的文件都放在该目录下。

2>获取待烧录的镜像文件

svn list svn://192.168.2.148/smartphone/td0901/release/images查看服务器上的

版本情况,通常我们下载最新的,例如,下载9月18号发布的版本:

svn co svn://192.168.2.148/smartphone/td0901/release/images/images20090918

3>烧录镜像文件

用以下文件为例,示范通过tftp烧写内核和文件系统

内核zImage0917

系统分区:system0918.img

数据分区data0918.img

待烧写的以上文件必须存在于tftp服务器根目录/tftpboot下。

具体步骤:

首先连接好硬件设备进入blob下载模式

1>blob起来后按任意键

Processing obm parameters...

Can't detect micco.Set PMIC as normal I2C mode.

NAND flash(Manu=0x98Device=0xba)detected!

Slot0Found

get relocation table

Found Main Bad block table at address0x0f000000,version0x01

Found Mirror Bad block table at address0x0efc0000,version0x01

Consider yourself BLOBed!

blob version2.0.5-pre3for Marvell Littleton

Copyright(C)19992000200120022003Jan-Derk Bakker and Erik Mouw

blob comes with ABSOLUTELY NO WARRANTY;read the GNU GPL for details.

This is free software,and you are welcome to redistribute it

under certain conditions;read the GNU GPL for details.

length not align with page size,change to0x0

Read flash from0x60000,length0x0

Done

Autoboot(2seconds)in progress,press any key to stop..

Autoboot aborted

Type"help"to get a list of commands

blob>

2>通过tftp下载内核到pc内存0x80800000地址处

blob>tftp zImage0917

Begin init ether usbnet!!!

*****Plug-in USB cable&config usbdnet now******

exit check_usb_connection:1

TFTPing zImage0917*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK.

received6144blocks(3145156bytes)

tftp_cmd:file'zImage0917'loaded via tftp to address0x80800000.

3>擦除原来的内核分区,0x100000为分区起始地址,0x300000为分区长度

blob>nanderase-z0x1000000x400000

the current NAND chip does not support Block Unlocking.

Erase0x300000length data from flash:0x100000

Erase flash from0x100000,length0x300000 ........................Done

4>烧写内存0x80800000开始实际长度为3145156的内核数据到起始地址为0x100000的内核分区

blob>nandwrite-z0x808000000x1000003145156

the current NAND chip does not support Block Unlocking.

Write0x2ffdc4length data from RAM:0x80800000to flash:0x100000

Write flash from0x100000,length0x2ffdc4

Erase flash from0x100000,length0x300000 ........................Done

........................Done

5>下载系统分区镜像文件到pc内存0x80800000地址处

blob>tftp system0918.img

TFTPing system0918.img*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK. received113138blocks(57925824bytes)

tftp_cmd:file'system0918.img'loaded via tftp to address0x80800000.

6>擦除原来的flash系统分区

blob>nanderase-z0x5000000x4000000

the current NAND chip does not support Block Unlocking.

Erase0x3e0f800length data from flash:0x400000

Erase flash from0x400000,length0x3e0f800 ................................................................................... ................................................................................... ................................................................................... ..........................Done

7>烧写数据到flash系统分区

blob>nandwrite-y0x808000000x50000057925824

the current NAND chip does not support Block Unlocking.

Write0x373e0c0length data from RAM:0x80800000to flash:0x400000

Write flash from0x400000,length0x3591800

Erase flash from0x400000,length0x3591800 .................................................................................... ..................................................................................... ................................................................................Done .................................................................................... .................................................................................... ................................................................Done

8>下载数据分区镜像文件到pc内存0x80800000地址处

blob>tftp data0918.img

TFTPing data0918.img*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK.

received33992blocks(17402880bytes)

tftp_cmd:file'data0918.img'loaded via tftp to address0x80800000.

blob>

9>擦除原来的flash数据分区

blob>nanderase-z0x45000000xBB00000

the current NAND chip does not support Block Unlocking.

Erase0xa81f000length data from flash:0x4400000

Erase flash from0x4400000,length0xa81f000 ..................................................................................... ..................................................................................... ..................................................................................... ..................................................................................... ...................................................Done

10>烧写数据镜像到flash数据分区

blob>nandwrite-y0x808000000x450000017402880

the current NAND chip does not support Block Unlocking.

Write0x1098c00length data from RAM:0x80800000to flash:0x4400000

Write flash from0x4400000,length0x1018000

Erase flash from0x4400000,length0x1018000 ..................................................................................Done ..................................................................................Done

blob>

flash分区图:

*******************************************

*****

*blob*kernel*system*data*

*****

*******************************************

nanderase-z0x1000000x400000

tftp zImage

nandwrite-z0x808000000x100000

烧写system.img:

nanderase-z0x5000000x4000000

tftp system.img

nandwrite-y0x808000000x500000

烧写userdata.img:

nanderase-z0x45000000xBB00000

tftp userdata.img

nandwrite-y0x808000000x4500000

============================

涉及的内容:

svn服务器的使用

android的编译系统,原理,工具链,辅助工具,参数等,环境变量,怎样单独添加编译一个单独的模块等。

android的编译结果:文件系统分析

文件系统的使用,启动流程

设置模块流程分析

============================

====================================================

1.Android编译系统分析

编译脚本及系统变量

build/envsetup.sh脚本分析

在编译源代码之前通常需要在android源代码顶层目录执行../build/envsetup.sh目的是为了使用

脚本envsetup.sh里面定义了一些函数:

function help()

function get_abs_build_var()

function get_build_var()

function check_product()

function check_variant()

function setpaths()

function printconfig()

function set_stuff_for_environment()

function set_sequence_number()

function settitle()

function choosetype()

function chooseproduct()

function choosevariant()

function tapas()

function choosecombo()

function print_lunch_menu()

function lunch()

function gettop

function m()

function findmakefile()

function mm()

function mmm()

function croot()

function pid()

function gdbclient()

function jgrep()

function cgrep()

function resgrep()

function getprebuilt

function tracedmdump()

function runhat()

function getbugreports()

function startviewserver()

function stopviewserver()

function isviewserverstarted()

function smoketest()

function runtest()

function runtest_py()

function godir()

choosecombo命令分析:

function choosecombo()

{

choosesim$1

echo

echo

choosetype$2

echo

echo

chooseproduct$3

echo

echo

choosevariant$4

echo

set_stuff_for_environment

printconfig

}

会依次进行如下选择:

Build for the simulator or the device?

1.Device

2.Simulator

Which would you like?[1]

Build type choices are:

1.release

2.debug

Which would you like?[1]

Product choices are:

1.emulator

2.generic

3.sim

4.littleton

You can also type the name of a product if you know it. Which would you like?[littleton]

Variant choices are:

https://www.360docs.net/doc/f27904806.html,er

https://www.360docs.net/doc/f27904806.html,erdebug

3.eng

Which would you like?[eng]user

默认选择以后会出现:

TARGET_PRODUCT=littleton

TARGET_BUILD_VARIANT=user

TARGET_SIMULATOR=false

TARGET_BUILD_TYPE=release

TARGET_ARCH=arm

HOST_ARCH=x86

HOST_OS=linux

HOST_BUILD_TYPE=release

BUILD_ID=

==========

function chooseproduct()函数分析:

choices=(`/bin/ls build/target/board/*/BoardConfig.mk vendor/*/*/BoardConfig.mk2>/dev/null`)读取build/target/board/*目录下的板配置文件:BoardConfig.mk

读取vendor/*/*/目录下的板配置文件:BoardConfig.mk

choices的值为:

build/target/board/emulator/BoardConfig.mk

build/target/board/generic/BoardConfig.mk

build/target/board/sim/BoardConfig.mk

vendor/marvell/littleton/BoardConfig.mk

经过:

for choice in${choices[@]}

do

#The product name is the name of the directory containing

#the makefile we found,above.

prodlist=(${prodlist[@]}`dirname${choice}|xargs basename`)

done

的处理,prodlist的值为:

emulator generic sim littleton

所以选择菜单为:

Product choices are:

1.emulator

2.generic

3.sim

4.littleton

如果选择4,那么TARGET_PRODUCT被赋值为:littleton。

board_config_mk:=\

$(strip$(wildcard\

$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk\

vendor/*/$(TARGET_DEVICE)/BoardConfig.mk\

))

怎样添加一个模块

LOCAL_PATH:=$(call my-dir)

#编译静态库

include$(CLEAR_VARS)

LOCAL_MODULE=libhellos

LOCAL_CFLAGS=$(L_CFLAGS)

LOCAL_SRC_FILES=hellos.c

LOCAL_C_INCLUDES=$(INCLUDES)

LOCAL_SHARED_LIBRARIES:=libcutils

LOCAL_COPY_HEADERS_TO:=libhellos

LOCAL_COPY_HEADERS:=hellos.h

include$(BUILD_STATIC_LIBRARY)

#编译动态库

include$(CLEAR_VARS)

LOCAL_MODULE=libhellod

LOCAL_CFLAGS=$(L_CFLAGS)

LOCAL_SRC_FILES=hellod.c

LOCAL_C_INCLUDES=$(INCLUDES)

LOCAL_SHARED_LIBRARIES:=libcutils

LOCAL_COPY_HEADERS_TO:=libhellod

LOCAL_COPY_HEADERS:=hellod.h

include$(BUILD_SHARED_LIBRARY)

BUILD_TEST=true

ifeq($(BUILD_TEST),true)

#使用静态库

include$(CLEAR_VARS)

LOCAL_MODULE:=hellos

LOCAL_STATIC_LIBRARIES:=libhellos

LOCAL_SHARED_LIBRARIES:=

LOCAL_LDLIBS+=-ldl

LOCAL_CFLAGS:=$(L_CFLAGS)

LOCAL_SRC_FILES:=mains.c

LOCAL_C_INCLUDES:=$(INCLUDES)

include$(BUILD_EXECUTABLE)

#使用动态库

include$(CLEAR_VARS)

LOCAL_MODULE:=hellod

LOCAL_MODULE_TAGS:=debug

LOCAL_SHARED_LIBRARIES:=libc libcutils libhellod LOCAL_LDLIBS+=-ldl

LOCAL_CFLAGS:=$(L_CFLAGS)

LOCAL_SRC_FILES:=maind.c

LOCAL_C_INCLUDES:=$(INCLUDES)

include$(BUILD_EXECUTABLE)

endif#ifeq($(WPA_BUILD_SUPPLICANT),true)

########################

#local_target_dir:=$(TARGET_OUT)/etc/wifi

#include$(CLEAR_VARS)

#LOCAL_MODULE:=wpa_supplicant.conf

#LOCAL_MODULE_TAGS:=user

#LOCAL_MODULE_CLASS:=ETC

#LOCAL_MODULE_PATH:=$(local_target_dir)

#LOCAL_SRC_FILES:=$(LOCAL_MODULE)

#include$(BUILD_PREBUILT)

########################

系统变量解析

LOCAL_MODULE-编译的目标对象

LOCAL_SRC_FILES-编译的源文件

LOCAL_C_INCLUDES-需要包含的头文件目录

LOCAL_SHARED_LIBRARIES-链接时需要的外部库

LOCAL_PRELINK_MODULE-是否需要prelink处理

BUILD_SHARED_LIBRARY-指明要编译成动态库

LOCAL_PATH-编译时的目录

$(call目录,目录….)目录引入操作符

如该目录下有个文件夹名称src,则可以这样写$(call src),那么就会得到src目录的完整路径

include$(CLEAR_VARS)-清除之前的一些系统变量

CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk

在build/core/config.mk定义CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk

通过include包含自定义的.mk文件(即是自定义编译规则)或是引用系统其他的.mk文件(系统定义的编译规则)。

LOCAL_SRC_FILES-编译的源文件

可以是.c,.cpp,.java,.S(汇编文件)或是.aidl等格式

不同的文件用空格隔开。如果编译目录子目录,采用相对路径,如子目录/文件名。也可以通过$(call目录),指明编译某目录

下所有.c/.cpp/.java/.S/.aidl文件.追加文件LOCAL_SRC_FILES+=文件

LOCAL_C_INCLUDES-需要包含的头文件目录

可以是系统定义路径,也可以是相对路径.如该编译目录下有个include目录,写法是include/*.h

LOCAL_SHARED_LIBRARIES-链接时需要的外部共享库

LOCAL_STATIC_LIBRARIES-链接时需要的外部外部静态

LOCAL_JAVA_LIBRARIES加入jar包

LOCAL_MODULE-编译的目标对象

module是指系统的native code,通常针对c,c++代码

./system/core/sh/Android.mk:32:LOCAL_MODULE:=sh

./system/core/libcutils/Android.mk:71:LOCAL_MODULE:=libcutils

./system/core/cpio/Android.mk:9:LOCAL_MODULE:=mkbootfs

./system/core/mkbootimg/Android.mk:8:LOCAL_MODULE:=mkbootimg

./system/core/toolbox/Android.mk:61:LOCAL_MODULE:=toolbox

./system/core/logcat/Android.mk:10:LOCAL_MODULE:=logcat

./system/core/adb/Android.mk:65:LOCAL_MODULE:=adb

./system/core/adb/Android.mk:125:LOCAL_MODULE:=adbd

./system/core/init/Android.mk:20:LOCAL_MODULE:=init

./system/core/vold/Android.mk:24:LOCAL_MODULE:=vold

./system/core/mountd/Android.mk:13:LOCAL_MODULE:=mountd

LOCAL_PACKAGE_NAME

Java应用程序的名字用该变量定义

./packages/apps/Music/Android.mk:9:LOCAL_PACKAGE_NAME:=Music

./packages/apps/Browser/Android.mk:14:LOCAL_PACKAGE_NAME:=Browser

./packages/apps/Settings/Android.mk:8:LOCAL_PACKAGE_NAME:=Settings

./packages/apps/Stk/Android.mk:10:LOCAL_PACKAGE_NAME:=Stk

./packages/apps/Contacts/Android.mk:10:LOCAL_PACKAGE_NAME:=Contacts

./packages/apps/Mms/Android.mk:8:LOCAL_PACKAGE_NAME:=Mms

./packages/apps/Camera/Android.mk:8:LOCAL_PACKAGE_NAME:=Camera

./packages/apps/Phone/Android.mk:11:LOCAL_PACKAGE_NAME:=Phone

./packages/apps/VoiceDialer/Android.mk:8:LOCAL_PACKAGE_NAME:=VoiceDialer

BUILD_SHARED_LIBRARY-指明要编译成动态库。

编译的目标,用include操作符

UILD_STATIC_LIBRARY来指明要编译成静态库。

如果是java文件的话,会用到系统的编译脚本host_java_library.mk,用BUILD_PACKAGE来指明。三个编译

-------------------

include$(BUILD_STATIC_LIBRARY)

BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk

-------------------

include$(BUILD_SHARED_LIBRARY)

./build/core/config.mk:50:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk -------------------

include$(BUILD_HOST_SHARED_LIBRARY)

BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk

-------------------

include$(BUILD_EXECUTABLE)

build/core/config.mk:51:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk

-------------------

include$(BUILD_HOST_EXECUTABLE)

./build/core/config.mk:53:BUILD_HOST_EXECUTABLE:=

$(BUILD_SYSTEM)/host_executable.mk

-------------------

BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk

-------------------

BUILD_JAVA_LIBRARY

./build/core/config.mk:58:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk

------------------

BUILD_STATIC_JAVA_LIBRARY编译静态JAVA库

./build/core/config.mk:59:BUILD_STATIC_JAVA_LIBRARY:=

$(BUILD_SYSTEM)/static_java_library.mk

------------------

BUILD_HOST_JAVA_LIBRARY编译本机用的JAVA库

./build/core/config.mk:60:BUILD_HOST_JAVA_LIBRARY:=

$(BUILD_SYSTEM)/host_java_library.mk

------------------

BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk

BUILD_HOST_SHARED_LIBRARY:=$(BUILD_SYSTEM)/host_shared_library.mk

BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk

BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mk

BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk

BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk

BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk

BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk

BUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk

BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk

BUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk

BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk

BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk

BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk

BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk

BUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk

BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mk

BUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk

============

LOCAL_PRELINK_MODULE

Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,

是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的

动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。

动态链接和加载的过程开销很大,并且在大多数的系统上,函数库并不会常常被更动,每次程序被执行时所进行的链接

动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间

利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序

启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。

Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保

证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么android framework代码一改动,

这时候就会导致相关的应用程序重新被编译。

这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。

--------------------

变量设置为false那么将不做prelink操作

LOCAL_PRELINK_MODULE:=false

默认是需要prlink的,同时需要在build/core/prelink-linux-arm.map中加入

libhellod.so0x96000000

这个map文件好像是制定动态库的地址的,在前面注释上面有一些地址范围的信息,注意库与库之间的间隔数,

如果指定不好的话编译的时候会提示说地址空间冲突的问题。另外,注意排序,这里要把数大的放到前面去,

按照大小降序排序。

解析LOCAL_PRELINK_MODULE变量

build/core/dynamic_binary.mk:94:ifeq($(LOCAL_PRELINK_MODULE),true)

ifeq($(LOCAL_PRELINK_MODULE),true)

$(prelink_output):$(prelink_input)$(TARGET_PRELINKER_MAP)$(APRIORI)

$(transform-to-prelinked)

transform-to-prelinked定义:

./build/core/definitions.mk:1002:define transform-to-prelinked

define transform-to-prelinked

@mkdir-p$(dir$@)

@echo"target Prelink:$(PRIVATE_MODULE)($@)"

$(hide)$(APRIORI)\

--prelinkmap$(TARGET_PRELINKER_MAP)\

--locals-only\

--quiet\

$<\

--output$@

endef

./build/core/config.mk:183:APRIORI:=

$(HOST_OUT_EXECUTABLES)/apriori$(HOST_EXECUTABLE_SUFFIX)

prelink工具不是常用的prelink而是apriori,其源代码位于”/build/tools/apriori”参考文档:

动态库优化——Prelink(预连接)技术

https://www.360docs.net/doc/f27904806.html,/article/09-04/71629s.html

===============

LOCAL_ARM_MODE:=arm

目前Android大部分都是基于Arm处理器的,Arm指令用两种模式Thumb(每条指令两个字节)和arm指令(每条指令四个字节)

LOCAL_CFLAGS+=-O3-fstrict-aliasing-fprefetch-loop-arrays

通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高LOCAL_CFLAGS+=-W-Wall

LOCAL_CFLAGS+=-fPIC-DPIC

LOCAL_CFLAGS+=-O2-g-DADB_HOST=1-Wall-Wno-unused-parameter

LOCAL_CFLAGS+=-D_XOPEN_SOURCE-D_GNU_SOURCE-DSH_HISTORY

LOCAL_CFLAGS+=-DUSEOVERLAY2

根据条件选择相应的编译参数

ifeq($(TARGET_ARCH),arm)

LOCAL_CFLAGS+=-DANDROID_GADGET=1

LOCAL_CFLAGS:=$(PV_CFLAGS)

endif

ifeq($(TARGET_BUILD_TYPE),release)

LOCAL_CFLAGS+=-O2

endif

LOCAL_LDLIBS:=-lpthread

LOCAL_LDLIBS+=-ldl

ifdef USE_MARVELL_MVED

LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_mpeg4aspdecmved_wmmx2lnx

lib_il_h264decmved_wmmx2lnx

LOCAL_SHARED_LIBRARIES+=libMrvlMVED

else

LOCAL_WHOLE_STATIC_LIBRARIES+=lib_il_h264dec_wmmx2lnx

lib_il_mpeg4aspdec_wmmx2lnx

endif

====================

其他一些变量和脚本:

HOST_JNILIB_SUFFIX

LOCAL_MODULE_SUFFIX

LOCAL_MODULE_SUFFIX:=$(HOST_JNILIB_SUFFIX)

HOST_GLOBAL_LDFLAGS

TARGET_GLOBAL_LDFLAGS

PRIVATE_LDFLAGS

LOCAL_LDLIBS

LOCAL_C_INCLUDES

LOCAL_STATIC_LIBRARIES

LOCAL_STATIC_LIBRARIES+=codecJPDec_WMMX2LNX miscGen_WMMX2LNX LOCAL_SHARED_LIBRARIES

LOCAL_SHARED_LIBRARIES+=libMrvlIPP

LOCAL_SHARED_LIBRARIES+=$(common_SHARED_LIBRARIES)

LOCAL_SHARED_LIBRARIES+=libMrvlIPP

LOCAL_SHARED_LIBRARIES+=libdl

ifeq($(TARGET_PRODUCT),littleton)

LOCAL_C_INCLUDES+=vendor/marvell/littleton/m2d\

LOCAL_SHARED_LIBRARIES+=libOmxCore

endif

vendor/marvell/littleton/littleton.mk:27:PRODUCT_NAME:=littleton

vendor/marvell/littleton/littleton.mk:28:PRODUCT_DEVICE:=littleton

vendor/marvell/littleton/AndroidProducts.mk:13:$(LOCAL_DIR)/littleton.mk

vendor/sample/products/sample_addon.mk:40:PRODUCT_NAME:=sample_addon vendor/htc/dream-open/htc_dream.mk:6:PRODUCT_NAME:=htc_dream

./vendor/htc/dream-open/htc_dream.mk:7:PRODUCT_DEVICE:=dream-open

./vendor/htc/dream-open/AndroidProducts.mk:3:$(LOCAL_DIR)/htc_dream.mk

build/target/product/generic.mk:26:PRODUCT_NAME:=generic

build/target/product/generic_with_google.mk:20:PRODUCT_NAME:=generic_with_google build/target/product/min_dev.mk:6:PRODUCT_NAME:=min_dev

build/target/product/core.mk:2:PRODUCT_NAME:=

build/target/product/sim.mk:7:PRODUCT_NAME:=sim

build/target/product/sdk.mk:37:PRODUCT_NAME:=sdk

build/tools/buildinfo.sh:20:echo"https://www.360docs.net/doc/f27904806.html,=$PRODUCT_NAME"

lunch sample_addon-eng

lunch htc_dream-eng

lunch generic-eng

lunch1

lunch sim-eng

TARGET_BUILD_TYPE=release

lunch2

TARGET_BUILD_TYPE=debug

lunch generic-user

.PHONY:systemtarball-nodeps

systemtarball-nodeps:$(FS_GET_STATS)\

$(filter-out systemtarball-nodeps stnod,$(MAKECMDGOALS))

$(build-systemtarball-target)

.PHONY:stnod

stnod:systemtarball-nodeps

systemimage-nodeps snod

./core/main.mk:BUILD_SYSTEM:=$(TOPDIR)build/core

./core/main.mk:include$(BUILD_SYSTEM)/config.mk

./core/main.mk:include$(BUILD_SYSTEM)/cleanbuild.mk

./core/main.mk:include$(BUILD_SYSTEM)/version_defaults.mk

./core/main.mk:include$(BUILD_SYSTEM)/definitions.mk

./core/main.mk:include$(BUILD_SYSTEM)/Makefile

./core/static_java_library.mk:include$(BUILD_SYSTEM)/java_library.mk

./core/host_java_library.mk:include$(BUILD_SYSTEM)/base_rules.mk

./core/executable.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk

./core/java_library.mk:include$(BUILD_SYSTEM)/java.mk

./core/binary.mk:include$(BUILD_SYSTEM)/base_rules.mk

./core/raw_executable.mk:include$(BUILD_SYSTEM)/binary.mk

./core/prebuilt.mk:include$(BUILD_SYSTEM)/base_rules.mk

./core/host_executable.mk:include$(BUILD_SYSTEM)/binary.mk

./core/combo/select.mk:$(combo_target)PRELINKER_MAP:=$(BUILD_SYSTEM)/prelink-$(combo_os_arch).map

./core/shared_library.mk:include$(BUILD_SYSTEM)/dynamic_binary.mk

./core/config.mk:include$(BUILD_SYSTEM)/pathmap.mk

./core/config.mk:BUILD_COMBOS:=$(BUILD_SYSTEM)/combo

./core/config.mk:CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk

./core/config.mk:BUILD_HOST_STATIC_LIBRARY:=$(BUILD_SYSTEM)/host_static_library.mk ./core/config.mk:BUILD_HOST_SHARED_LIBRARY:=

$(BUILD_SYSTEM)/host_shared_library.mk

./core/config.mk:BUILD_STATIC_LIBRARY:=$(BUILD_SYSTEM)/static_library.mk

./core/config.mk:BUILD_RAW_STATIC_LIBRARY:=$(BUILD_SYSTEM)/raw_static_library.mk ./core/config.mk:BUILD_SHARED_LIBRARY:=$(BUILD_SYSTEM)/shared_library.mk

./core/config.mk:BUILD_EXECUTABLE:=$(BUILD_SYSTEM)/executable.mk

./core/config.mk:BUILD_RAW_EXECUTABLE:=$(BUILD_SYSTEM)/raw_executable.mk

./core/config.mk:BUILD_HOST_EXECUTABLE:=$(BUILD_SYSTEM)/host_executable.mk

./core/config.mk:BUILD_PACKAGE:=$(BUILD_SYSTEM)/package.mk

./core/config.mk:BUILD_HOST_PREBUILT:=$(BUILD_SYSTEM)/host_prebuilt.mk

./core/config.mk:BUILD_PREBUILT:=$(BUILD_SYSTEM)/prebuilt.mk

./core/config.mk:BUILD_MULTI_PREBUILT:=$(BUILD_SYSTEM)/multi_prebuilt.mk

./core/config.mk:BUILD_JAVA_LIBRARY:=$(BUILD_SYSTEM)/java_library.mk

./core/config.mk:BUILD_STATIC_JAVA_LIBRARY:=$(BUILD_SYSTEM)/static_java_library.mk ./core/config.mk:BUILD_HOST_JAVA_LIBRARY:=$(BUILD_SYSTEM)/host_java_library.mk

./core/config.mk:BUILD_DROIDDOC:=$(BUILD_SYSTEM)/droiddoc.mk

./core/config.mk:BUILD_COPY_HEADERS:=$(BUILD_SYSTEM)/copy_headers.mk

./core/config.mk:BUILD_KEY_CHAR_MAP:=$(BUILD_SYSTEM)/key_char_map.mk

./core/config.mk:HOST_JDK_TOOLS_JAR:=$(shell$(BUILD_SYSTEM)/find-jdk-tools-jar.sh)

./core/version_defaults.mk:INTERNAL_BUILD_ID_MAKEFILE:=$(wildcard

$(BUILD_SYSTEM)/build_id.mk)

./core/config.mk:include$(BUILD_SYSTEM)/envsetup.mk

./core/config.mk:include$(BUILD_SYSTEM)/combo/select.mk

./core/config.mk:include$(BUILD_SYSTEM)/combo/select.mk

./core/config.mk:include$(BUILD_SYSTEM)/combo/javac.mk

./core/product_config.mk:include$(BUILD_SYSTEM)/node_fns.mk

./core/product_config.mk:include$(BUILD_SYSTEM)/product.mk

./core/product_config.mk:include$(BUILD_SYSTEM)/device.mk

./core/dynamic_binary.mk:include$(BUILD_SYSTEM)/binary.mk

./core/host_static_library.mk:include$(BUILD_SYSTEM)/binary.mk

./core/java.mk:include$(BUILD_SYSTEM)/base_rules.mk

./core/host_shared_library.mk:include$(BUILD_SYSTEM)/binary.mk

./core/key_char_map.mk:include$(BUILD_SYSTEM)/base_rules.mk

./core/package.mk:include$(BUILD_SYSTEM)/java.mk

./core/static_library.mk:include$(BUILD_SYSTEM)/binary.mk

./core/definitions.mk:include$(BUILD_SYSTEM)/distdir.mk

./core/envsetup.mk:include$(BUILD_SYSTEM)/product_config.mk

./tools/apicheck/Android.mk:include$(BUILD_SYSTEM)/base_rules.mk

./tools/dexpreopt/Android.mk:include$(BUILD_SYSTEM)/host_prebuilt.mk

COMMON_GLOBAL_CFLAGS:=-DANDROID-fmessage-length=0-W-Wall-Wno-unused COMMON_DEBUG_CFLAGS:=

COMMON_RELEASE_CFLAGS:=-DNDEBUG-UDEBUG

COMMON_PACKAGE_SUFFIX:=.zip

COMMON_JAVA_PACKAGE_SUFFIX:=.jar

COMMON_ANDROID_PACKAGE_SUFFIX:=.apk

ACP:=$(HOST_OUT_EXECUTABLES)/acp$(HOST_EXECUTABLE_SUFFIX)

AIDL:=$(HOST_OUT_EXECUTABLES)/aidl$(HOST_EXECUTABLE_SUFFIX) MKBOOTFS:=$(HOST_OUT_EXECUTABLES)/mkbootfs$(HOST_EXECUTABLE_SUFFIX) MKBOOTIMG:=$(HOST_OUT_EXECUTABLES)/mkbootimg$(HOST_EXECUTABLE_SUFFIX) MKYAFFS2:=

$(HOST_OUT_EXECUTABLES)/mkyaffs2image$(HOST_EXECUTABLE_SUFFIX) APICHECK:=$(HOST_OUT_EXECUTABLES)/apicheck$(HOST_EXECUTABLE_SUFFIX)

FS_GET_STATS:=

$(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX)

MKEXT2IMG:=$(HOST_OUT_EXECUTABLES)/genext2fs$(HOST_EXECUTABLE_SUFFIX) MKEXT2BOOTIMG:=external/genext2fs/mkbootimg_ext2.sh

MKTARBALL:=build/tools/mktarball.sh

DX:=$(HOST_OUT_EXECUTABLES)/dx

LOCALIZE:=$(HOST_OUT_EXECUTABLES)/localize$(HOST_EXECUTABLE_SUFFIX) HOST_GLOBAL_LDFLAGS

TARGET_GLOBAL_LDFLAGS

PRIVATE_LDFLAGS

build/core/combo/linux-arm.mk:16:$(combo_target)NO_UNDEFINED_LDFLAGS:=-Wl,--no-undefined

save_CFLAGS="$CFLAGS-g-mabi=aapcs-linux"

LDFLAGS='$LDFLAGS-lX11-lxml2-lXdmcp-lXau-lexpat-lXrender-lXft-lfontconfig-lfreetype-lz'

--without-libtiff"#--with-gdktarget=directfb"

LDFLAGS="-Wl,-rpath-link=$LD_LIBRARY_PATH-L$PREFIX/lib${env_LDFLAGS} ${save_LDFLAGS}"

./vendor/marvell/external/alsa/alsa-lib/src/Mdroid.mk:43:LOCAL_CFLAGS+=-mabi=aapcs-linux

./vendor/marvell/external/alsa/alsa-tools/Mdroid.mk:8:LOCAL_CFLAGS+=-mabi=aapcs-linux

./vendor/marvell/littleton/libaudio/Mdroid.mk:22:LOCAL_CPPFLAGS+=-mabi=aapcs-linux

./external/wpa_supplicant/Android.mk:35:L_CFLAGS+=-mabi=aapcs-linux

./system/wlan/ti/sta_dk_4_0_4_32/CUDK/tiwlan_loader/Android.mk:88:LOCAL_CFLAGS=-Wall-Wstrict-prototypes

$(CLI_DEBUGFLAGS)-D__LINUX__$(DK_DEFINES)-mabi=aapcs-linux

./kernel/arch/arm/Makefile

ifeq($(CONFIG_AEABI),y)

CFLAGS_ABI:=-mabi=aapcs-linux-mno-thumb-interwork

else

CFLAGS_ABI:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)$(call cc-option,-mno-thumb-interwork,)

endif

#Need-Uarm for gcc<3.x

KBUILD_CFLAGS+=$(CFLAGS_ABI)$(arch-y)$(tune-y)$(call cc-option,-mshort-load-

bytes,$(call cc-option,

-malignment-traps,))-msoft-float-Uarm

KBUILD_AFLAGS+=$(CFLAGS_ABI)$(arch-y)$(tune-y)-msoft-float

CFLAGS="${temp_CFLAGS}-I/include-I/usr/include-I/usr/X11R7/include"

LDFLAGS="${temp_LDFLAGS}-L/lib-L/usr/lib-L/usr/X11R7/lib"

Android Build System

https://www.360docs.net/doc/f27904806.html,/u/8059/showart_1420446.html

====================================================

====================================================================

2.文件系统分析

2.1文件系统概述

2.2ext2,ext3文件系统

2.3jffs,jffs2文件系统

2.4yafss,yaffs2文件系统

2.5虚拟文件系统(sysfs,proc,tsmpfs等)

2.6一些必要重要的系统文件(/etc/fstab,inittab,init.rc等)

2.7制作文件系统

2.1文件系统概述

文件系统(File system)指代贮存在计算机上的文件和目录。文件系统可以有不同的格式,叫做文件系统类型(file system types)。

这些格式决定信息是如何被贮存为文件和目录。Linux支持多种文件系统,包括sysfs,proc,tmpfs,ext2,ext3,cramfs,ramfs,nfs,

vfat,jffs,jffs2,yaffs,yaffs2等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),

为各类文件系统提供一个统一的操作界面和应用编程接口。Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件

系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。

不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备

为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,

ramdisk,ramfs/tmpfs等。

2.2ext2,ext3文件系统

在异常断电或系统崩溃(又称不洁系统关机,unclean system shutdown)发生时,每个在系统上挂载了的ext2文件系统必须要使用e2fsck

程序来检查其一致性。这是一个很费时的过程,特别是在检查包含大量文件的庞大文件卷时,它会大大耽搁引导时间。在这期间,文件卷上的所有数据

都不能被访问。由ext3文件系统提供的登记报表方式意味着不洁系统关机后没必要再进行此类文件系统检查。使用ext3系统时,一致性检查只在

某些罕见的硬件失效(如硬盘驱动器失效)情况下才发生。

参考文档:

Linux ext2/ext3文件系统详解

https://www.360docs.net/doc/f27904806.html,/computer/system/2008/5536.asp

Linux EXT2文件系统结构分析(详情见附件)

https://www.360docs.net/doc/f27904806.html,/350944/69655

Ext2文件系统的硬盘布局

https://www.360docs.net/doc/f27904806.html,/developerworks/cn/linux/filesystem/ext2/

2.3jffs,jffs2文件系统

jffs2文件系统制作工具mkfs.jffs2

1.从网上下载:

mkjffs2-arm.rar https://www.360docs.net/doc/f27904806.html,/blog/upfile2/080701192924.rar

mkjffs2-pc.rar https://www.360docs.net/doc/f27904806.html,/blog/upfile2/080701193005.rar

2.通过源代码获得mkfs.jffs2

源码下载地址:ftp://https://www.360docs.net/doc/f27904806.html,/pub/mtd-utils/mtd-utils-1.0.1.tar.gz

编译的过程中缺少sys/acl.h文件,ubunt-8.10通过下面命令安装

sudo apt-get install libacl1-dev

制作jffs2文件系统

mkfs.jffs2-r rootfs/-o rootfs-jffs2.img-e0x4000--pad=0x500000-s0x200-n

各参数的意义:

(1)-r:指定要做成image的源文件夹.

(2)-o:指定输出image文档的文件名.

(3)-e:每一块要抹除的block size,默认值是64KB.要注意,不同的flash,其block size会不一样

(4)--pad(-p):用16进制來表示所要输出文档的大小,也就是root.jffs2的size。很重要的是,为了不浪费flash空间,這个值

最好符合flash driver所规划的分区大小。

(5)如果挂载后会出现类似:CLEANMARKER node found at0x0042c000has totlen0xc!=normal 0x0的警告,则加上-n就会消失。

在pc上mount jffs2镜像文件

首先确保系统支持jffs2文件系统,通过命令cat/proc/filesystems查看

sudo modprobe mtdram

sudo modprobe mtdblock插入此模块以后将会生成节点:/dev/mtdblock0

sudo modprobe jffs2

在一些系统fedora core5,linux2.6.15.1上的mtdram只有4.2MB

所以最好自己指定。

例如:

modprobe mtdram total_size=49152erase_size=128

sudo dd if=rootfs-jffs2.img of=/dev/mtdblock0

sudo mount-t jffs2/dev/mtdblock0/mnt

更多参考文档:

mkfs.jffs2参数详解

https://www.360docs.net/doc/f27904806.html,/s/blog_4a4163880100cogf.html~type=v5_one&label=rela_prevarticle

在linux pc上挂载jffs2文件系

https://www.360docs.net/doc/f27904806.html,/s/blog_4a4163880100cozw.html

2.4yafss,yaffs2文件系统

2.4.1yaffs2文件系统制作工具mkyaffs2image

2.4.2在pc上挂载yaffs2文件系统

2.4.3通过工具释放yaffs2文件系统

YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计的嵌入式文件系统。与JFFS相比,

它减少了一些功能,因此速度更快、占用内存更少。YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。它们的不同之处在于:

1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定

性不如JAFFS,但是资源占用少。

2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在

YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。

3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。

YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件

进行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD(Memory Technology Devices,内存技术设备)是对Flash操作的

接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。

YAFFS2是YAFFS的升级版,能更好的支持NAND FLASH。

2.4.1yaffs2文件系统制作工具mkyaffs2image

1.android yaffs2源代码external/yaffs2/

2.从网上下载yaffs2源码

下载:https://www.360docs.net/doc/f27904806.html,/cgi-bin/viewcvs.cgi/yaffs/

下载:https://www.360docs.net/doc/f27904806.html,/cgi-bin/viewcvs.cgi/yaffs2/

//点击左下角的Download tarball下整个tar包

cvs下载:

export CVSROOT=:pserver:anonymous@https://www.360docs.net/doc/f27904806.html,:/home/aleph1/cvs cvs logon

cvs co yaffs2

tar-xvf yaffs2.tar.bz;cd yaffs2;make

为ubuntu8.10添加yaffs文件系统支持

sudo mkdir-p/lib/modules/2.6.27-4-generic/kernel/fs/yaffs2

sudo cp yaffs2.ko/lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/

sudo insmod/lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.ko

制作yaffs2文件系统

mkyaffs2image/nfsroot/rootfs/system system.img

/nfsroot/rootfs/system为文件系统所在的目录system.img为生成的镜像文件

2.4.2在pc上挂载yaffs2文件系统

sudo mkdir-p/mnt/mtd/yaffs2

sudo modprobe mtdblock

sudo modprobe mtdram total_size=100000erase_size=256

sudo insmod/lib/modules/2.6.27-4-generic/kernel/fs/yaffs2/yaffs2.ko

sudo dd if=rootfs.yaffs2of=/dev/mtdblock0

sudo mount-t yaffs2/dev/mtdblock0/mnt/mtd/yaffs2

#modprobe mtdram total_size=49152erase_size=128

#cat rootfs.yaffs2>/dev/mtdblock0

2.4.3通过工具释放yaffs2文件系统

yaffs2image逆向工具

https://www.360docs.net/doc/f27904806.html,/absurd/archive/2008/11/05/3223825.aspx

获取源代码:

https://www.360docs.net/doc/f27904806.html,/bbs/download/file.php?id=1

2.5虚拟文件系统(sysfs,proc,tsmpfs等)

2.5.1虚拟文件系统概述

2.5.2proc文件系统

2.5.3sysfs文件系统

2.5.4tmpfs文件系统

2.5.5usbdevfs文件系统

2.5.6devpts文件系统

2.5.1虚拟文件系统概述

虚拟内核文件系统(Virtual Kernel File Systems),是指那些是由内核产生但并不存在于硬盘上(存在于内存中)的文件系统,

他们被用来与内核进行通信前面介绍的ext2,ext3,jffs2,yaffs2等目录和文件,都是真真正正、实实在在的存储在具体的外部存

储设备上的,它们可能是在本机的硬盘、闪存、光盘中,可能保存在不只一个磁盘分区中,也可能保存在网络中其它主机的存储设备中的。

虚拟文件系统,虽然它们出现在根文件系统中,但它里面的内容却无法在任何外部存储设备中找到,因为它们都在内存中。

==========

android网络挂载:

rootfs/rootfs rw00

/dev/root/nfs rw,vers=2,rsize=1024,wsize=1024,...

tmpfs/dev tmpfs rw,mode=75500

devpts/dev/pts devpts rw,mode=60000

proc/proc proc rw00

sysfs/sys sysfs rw00

Linux考试知识点总结

Linux服务器配置与应用考试覆盖范围知识点总结 考前★绝密知识点覆盖率95% 总结人:敌无小新时间:2009年12月23日晚 此复习题尽量保密,被老师发现可能会重考,慎重带入考场! 1.安装软件的方法? RPM包,源码包安装,*.bin格式安装文件安装 2.RPM命令参数使用? 安装软件#RPM -ivh 软件包名参数:-q 查询-U 升级-V检查-e卸载3.源码包安装过程实例? #tar -xzvf *.tar.gz #cd * #./config #make # make install 4.bin文件安装? #./*.bin 5.Linux下设置服务自启动的过程(两种)? ntsysv chkconfig --level 35 服务名称on 6.Samba服务正常工作至少需要两个守护进程,分别是? nmbd smbd 7.Samba服务的核心配置文件? /etc/samba/smb.conf 8.Samba服务器使用的安全等级? share安全等级共享级别,不需要账号和密码,安全性最低 user 安全等级用户级别,需要账号和密码,默认为该级别 server安全等级服务器级别,与user同级别,但验证由另一台SMB负责9.NFS需要哪两个安装包? nfs-utils主要提供nfs服务目录共享 portmap 主要提供远程连接 10.NFS的主配置文件? /etc/exports 11.启动停止与重启NFS服务?(此题顺序不能错) /etc/init.d/portmap start 或service portmap start /etc/init.d/nfs start service nfs start /etc/init.d/nfs stop service nfs stop /etc/init.d/portmap stop service portmap stop /etc/init.d/nfs restart service nfs restart 12.查看NFS服务器192.168.16.177上共享目录? #showmount -e 192.168.16.177 13.挂载NFS服务器上输出目录?(实例) #mount -t NFS 服务器名或IP地址:输出目录本地挂载目录 #mkdir /mnt/nfs #mount -t nfs 192.168.16.177:/nfs/public /mnt/nfs 14.卸载NFS服务器挂载目录? #umount /mnt/nfs 15.实现自动挂载NFS目录,应修改哪个文件,怎么设置? /etc/fstab (储存系统内的静态挂载点,即每次启动时挂载的文件系统。) NFS服务器名或IP:输出目录本地挂载目录nfs defaults 0 0

Android开发的核心知识

想要学习移动应用的开发,除了必备的知识要掌握好之外,更多的是要掌握一些核心的基础知识,并且是能够起到关键性作用的知识点,必须是要了解清楚,如果你也是在学习Android开发,下面的核心基础或者对你有一定的帮助! 1.ListView的引入 为什么要采用listview?其实是在数据量过于庞大时,传统的存储方式它是会占用机器大量内存,最终导致OOM异常(内存溢出),listview的出现将会是有效的解决这个弊端的出现。 重点来了listview如何使用呢? res/layout布局文件中定义listview src的java代码里面关心控件findviewbyid(R.id.listview); 创建适配器对象,适配器继承baseAdapter接口 2.构造方法 getCount();控制listview的条目数 getView();得到当前条目视图 View.inflate();布局填充器 设置适配器:setAdapter(adapter); 设置listview列表项的点击事件:setOnClickLinsstener();

通知listview更新数据:adapter.notifyDataSetChanged(); 3.对话框的使用 *普通对话框 *单选对话框 *多选对话框 *进度对话框 *进度条对话框 *自定义对话框 布局填充器:Viewview=View.inflate(Context,https://www.360docs.net/doc/f27904806.html,yout.dialog,null); 核心API:dialog.setView(view); 4.常见的一些适配器的使用 *数组适配器:ArrayAdapter *简单适配器:SimpleAdapter 5.数据库的常见的事务 为什么需要需要定义数据库事务?最主要的还是为了保证多条操作语句同步执行 6.数据库事务执行流程 db.beginTransaction();开启事务 db.setTransactionSuccessful();设置事务执行成功 db.endTransaction();结束事务 7.样式和主题 样式的作用在单独的UI控件上面 主题的作用它是在activity或者application上 以上的这些功能控件、数据库等这些是开发中必备的功能,在开发中只要这些基本的核心知识都掌握了,那么这对你接下里的进一步开发是比较有帮助的。

android开发试用期工作总结

android开发试用期工作总结 篇一:android软件开发工程师转正个人总结 个人总结 我于20XX年8月13日进入公司,根据公司的需要,目前担任Android软件工程师一职,负责综合代维,考务通手机客户端的开发工作。将近3个月的时候在这个新的工作环境我收获颇深。开始让我独立完成整个项目,这还是我的第一次,之前在公司是多人完成,过程中也遇到了许多困难,但是都一一解决了,我想这是我最宝贵的经历,通过三个月的不断学习,在项目开发中的不断锻炼以及同事、领导的帮助,我已逐渐融入这个大家庭,个人的工作技能也有了明显的提高,虽然仍有一些不足,但三个月以来我付出了不少,也收获了不少,我感觉自己成长了,也逐渐成熟了。 初到公司,加入了咨询与信息化部,加入了综合代维项目组,我也曾担心自己不知道该怎么与项目组的同事沟通,担心不知道怎么做好工作,但是项目组的前辈们都很亲切,也很耐心的教导我,解答我的疑问,以及他们团结向上的精神,让我很快的熟悉了工作,融入了项目组。 在这三个月的学习和工作中,我一直严格要求自己,遵循公司的规章制度,认真完成领导布置的每一项任务,遇到的问题虚心的向项目组的前辈们学习、请教,不断的提高、

充实自己。开发过程中出现的一些差错,也有前辈们耐心的指出和指导我修改,这些经历让我不断成熟,处理问题时考虑得更全面,杜绝类似情况的发生。在此我要特地感谢部门的领导和同事们对我的指引和帮助,感谢他们对我工作上失误的提醒和指正。 经过这三个月,我已经能独立进行开发任务,按时按质的完成分配的工作任务,当然还有许多不足,开发的经验仍有待提高,编写代码的简洁性和完整性也需要进一步增强,需要不断的继续学习以提高自己的工作能力。 总之,这三个月来我学到了很多,感悟了很多;看到公司的迅速发展,看到部门的同事越来越多,我深深地感到骄傲和自豪,也更加迫切的希望以一名正式员工的身份在这里工作,实现自己的奋斗目标,体现自己的人生价值,和公司一起成长。 我会用谦虚的态度和饱满的热情做好我的本职工作,为公司创造价值,同公司一起展望美好的未来! XX 20XX年11月13日 篇二:研发试用期工作总结 篇一:研发助理试用期总结 时间如白驹过隙,两个月试用期即将结束,在同事们的悉心关怀和指导下,加上自己不懈努力,各方面取得了一定

linux考试知识点汇总.doc

LINUX 考试知识点总结 %1. 填空题 1. 文件权限 %1. 简答题 1. 1 inux 的特点 与Windows 的区別 特点:①.真正的多用户多任务操作系统 %1 .良好的兼容性,开发功能强 %1 .可移植性强 %1 .高度稳定性 %1 .丰富的图形用户界面 区别:①?多用户方面:同一时刻不同的用户访问 %1 .GUI (图形用户界面)方面 Linux 与内核相互独立 Windows 与内核结合 %1 .共享资源的相互访问 rwx rwx rwx 类型 user gro 叩 other d rwx rwx rwx 2. 文件编辑器的基本操作 w 保存 q 退出 q!强制退出 3. 文件链接命令 软链接:In -s 目标 硬链接:In 4. 创建文件/文件夹 touch mkdir 5. 文件不同对比命令 diff 6. 显示文本 cat less more 7. 删除命令 rm rm -f 强制删除 rm -r 递归删除 8. 移动文件/重命名 mv 文件名目标目录 mv 文件名新文件名 9. 复制命令 #cp ~a #cp -r 目录目标目录 #cp 文件名新文件名 文件 文件夹 链接名 rmdir 删除非空文件夹 rmdir -r 递归删除非空文件夹 移动 重命名 保留文件权限复制 复制目录 重命名

3.正则表达式 元字符:元字符名 A $* Linux -> windows 使用 NFS 与 Samba 服务器 Windows -> linux 通过网上邻居 %1 .配置文件 Windows 在注册表 Linux 由指定的存放位置女口: /etc /dev ⑤.域 linux windows 身份验证 无 有 性能 强 弱 可靠性(稳定性) 强 弱 系统管理 有抗拒感 简单易用 安全性 强 弱 功能 强 弱 2. 查找命令归总 find 命令 不根据数据库查找,速度慢,默认区分大小写 在指定的目录开始,递归的搜索各个子目录,查询满足条件的文件并对应采取相关操作 Slocate 命令 slocate 本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 语 法:slocate [-u][-help][-version][-d <目录〉][查找的文件] 使用一u 选项更新数据库数据 whereis whereis 指令会在特定目录屮查找符合条件的文件。这些文件的烈性应属于原始代码, 二进制文件,或是帮助文件 语 法:whereis [-bfmsu][-B < 目录>…]卜M < 目录>...][-S < 目录>...][文件…] which which 指令会在环境变量$PATH 设置的冃录里查找符合条件的文件。 语 法:which [文件…] locate locate 指令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合 乎范本样式条件的文件或目录。 语 法:locate [-d v 数据库文件>][-help][-version][?a 本样式…] 说明 只匹配行首 只匹配行尾

Android应用开发基本知识点汇总

Android应用开发基本知识点汇总 Activity 一生命周期 4种状态 running / paused / stopped / killed 生命周期 Activity启动 onCreate -> onStart -> onResume 点Home返回主界面 onPause -> onStop 再次回到原Activity onRestart -> onStart -> onResume 退出Activity onPause -> onStop -> onDestroy 进程优先级前台/可见/服务/后台/空 二任务栈 三启动模式 standard singleTop 栈顶复用 singleTask 栈内复用 singeInstance 四scheme跳转协议 服务器可以定制化告诉App跳转哪个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面 Fragment 一第五大组件 为什么是第五大组件 Fragment相对Activity更节省内存,切换更舒适Fragment加载到Activity的两种方式 静态加载xml 动态加载fragmentTransaction.add(id, fragment, “name”); .commit; FragmentPagerAdapter与FragmentStatePagerAdapter

FragmentStatePagerAdapter在切换时回收内存,适合页面较多的情况FragmentPagerAdapter并没有回收内存,只是detach了Activity 二生命周期 onAttach -> onCreate -> onCreateView -> onViewCreated -> onActivityCreated -> onStart -> onResume -> onPause -> onStop -> onDestroyView -> onDestroy -> onDetach 先创建Activity后创建Fragment,先销毁Fragment后销毁Activity 三Fragment之间的通信 Fragment调用Activity getActivity Activity调用Fragment 接口回调 Fragment调用Fragment方法findFragmentById 四FragmentManager replace add remove Service 一应用场景,与Thread区别 Service是什么后台长时间运行,没有用户界面,运行在主线程,不能有耗时操作 Service与Thread区别 Activity难以与Thread交互,尤其当Activity销毁以后 二开启Service的两种方式 StartService onCreate -> onStartCommand -> onBind -> onDestroy onStartCommand return START_STICKY;

安卓开发实习总结

安卓实习心得_安卓开发实习总结 不知不觉中为期三周的实训已经接近尾声。虽然时间很短,不过我确实学到了一些我觉得有用的东西,并且是平时上课学不到的东西。三周的实训,时间很短,确实很短。原本刚开始,乃至之前听 说有为期三周的实训的时候,都觉得,这样的实训不过就是走过场 罢了,只有三周的时间,能学到什么东西呢?所以一开始也没当回事。 就这样,带着这样的心态,开始了实训。因为第一天周一上午没有课,下午,才算是正式开始了三周的实训。一开始听老师讲课的 时候,感觉很舒服啊,噼里啪啦一讲一堆,不过我就喜欢这样的, 听着爽啊。平时老师上课的时候都是讲一句顿一顿,或者一句话反 复琢磨半天,这样的话,虽然老师的出发点是好的,是为了让学生 更容易理解,但这样的话,教学的整体进度就下来了。而且就算是 一个知识点反复讲,也不见得能就精通了这个东西,或者说对这个 有多么理解。反而容易让学生产生一种懈怠的情绪。 一、第一件事:说话做事要有真凭实据 而这样一开始,老师就给我一种耳目一新的感觉:这老师上课带劲啊!不过也就仅此而已了。老师花了一下午的时间着重介绍了老师 所在的公司,以及我们接下来三周的实训计划。接下来一周实训之后,这个实训在老师的刻意营造下,尽量模仿公司的氛围。而让我 感受最受的就是:凭事实说话。就是无论要下什么结论的时候,都 要拿得出能够说服人的数据。 这是我在第一周中感受最深的一件事。也是我学到的第一件事。说话下结论要有真凭实据。 二、第二件事:专业技术的不断学习 在这一周中,老师着重讲了如何进行系统构架。因为之前也跟老师做过项目,所以对进行系统构架的理解要稍微深入些,对其重要

性的了解也要多一些。这样,在老师的讲解下,再和我以前的理解 相互验证,感觉就像武功高手,在前辈的点拨下顿悟了一样。 这就是我学到的第二件事,是在专业技能方面的收获。 三、第三件事:学会寻找动力 然后在接下来的一周中,这样的学习中老师让我们每组一个白板,然后把每天的任务完成情况着实记录。这样,不同的组之间要对比; 同组,不同的组员之间对比;自己今天和昨天的对比。无形中产生了 一种强大的推理,推动我们前进。 这是我学习到的第三件事:没有动力,就学会寻找动力,而比较,是最有效的激励。 四、第四件事:学会尊重别人,那样你也会获得别人的尊重 在第二周结束的时候,我们用来结束实训的一个项目就正式开始了。这个项目的时间很短,三天,如果算上上周末的时间的话,那 就是五天,但前一周的时间确实没有有效的利用起来。那么这样只 好算三天了。在这次项目中,我没有一个人大包大揽,一个人把项 目扛下来。因为之前跟老师做过项目,并且我也是小组负责人,虽 然作为这个小组负责人,我做的很不好,但有这样的一次经历之后,我知道我哪里做的不好,哪里有问题,虽然不会很全面,但至少有 一些努力的方向了。 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期 我通过的大量的AndroidSDK开发范例大全中的例子以及Android提 供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过 这些例子的学习我可以学习到了很多和以前java上相通的思想。 我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。 1通过半个月的android实习,基本掌握了Android应用程序开 发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法 也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对

计算机基础复习总结要点-(整理精华版)

使用方法:颜色标记,颜色擦除法 复习要点 一、基础知识 1.计算机的发展、特点、分类及其应用领域. 计算机系统的配置及主要技术指标(字长、运算速度、内存容量、外存容量)。 (1)1946年2 月,世界上第一台计算机于美国宾州大学诞生,取名“ 电子数字积分计算机(Electronic Numerical Integrator And Calculator)”,简称“(ENIAC)埃尼亚克” (2)发展 第一阶段: 电子器件: 电子管 第二阶段: 电子器件:晶体管 第三阶段: 电子器件:中、小规模集成电路(IC) 第四阶段: 电子器件:大规模集成电路 (3)计算机的特点 1)运算速度快2)计算精度高3)存储功能强4)具有逻辑判断能力5)具有自动运行能力 (4)计算机的分类 根据计算机的运算速度、字长、存储容量、软件配置等多方面的综合性能指标可以将计算机分为: 巨型机(精度最高,速度最快)、大型机、中型机、小型机、工作站、个人计算机(PC) 计算机应用:计算机辅助设计(CAD)计算机辅助教学(CAI)计算机辅助制造(CAM)计算机辅助测试(CAT) 2.计算机信息的表示:数、字符的编码包括西文字符与ASCII码和汉字及其编码(外码,内码,汉字库,字模及点阵)。数据的存储单位(位、字节、字) (1)西文字符编码 ◆基本ASCII码字符集包括了128个字符 ◆采用7位编码(0000####),最高位为0,共8位,在内存中存储占一个字节. ◆Ascii码值规律: 数字: ASCII: 0-9 (值48—57) 大写字母:ASCII: A-Z(值65—90) 小写字母: ASCII:a-z(值97—112) (2)汉字编码 汉字在计算机中的二进制存储形式,通常占2字节,每字节最高位为1—机内码,汉字在计算机中唯一表现形式 用户进行汉字输入操作时使用的键位代码——输入码(外码) 音码输入(“全拼”、“智能ABC”、“微软拼音”) 显示汉字时,对汉字形状进行描述的二进制编码——字形码(点阵码) 利用点阵描述一个汉字可以用24×24点阵表示,每行24位(3字节),共24×3=72字节; 可以用16×16点阵表示,每行16位(2字节),共16×2=32字节。(每一个点代表一个二 进制位bit) 3.存储容量的概念。 存储器中存储单元的总数,以字节为单位. 1B(Byte)=8b(bit)

Linux复习资料整理(jxust)

1、Linux可以运行在两种模式 用户模式和内核模式 2、VFS及其的四个数据结构 虚拟文件系统是Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口;它也提供了内核中的一个抽象功能,允许不同的文件系统共存。 系统中所有的文件系统不但依赖VFS共存,而且也依靠VFS协同工作。 四个数据结构:超级块对象、索引结点对象、文件对象以及目录项对象 3、进程号、用户号? Linux系统上所有运行的东西都可以称为一个进程。 进程的基本状态三种:运行态、就绪态和阻塞态(或等待态)。

进程大致上来讲可分为两大类:系统进程与用户进程。 4、Linux进程有五种状态 linux上进程有5种状态: 1. 运行(正在运行或在运行队列中等待) 2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释 放) 5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 5、函数库 人们把大量的基础性操作编写成一个个独立的函数,这些函数具有低耦合、高内聚的特点,这些函数集合成一个已经编译好的不完整的二进制代码文件,就是函数库 写出函数原型或函数功能(字符串、开方) 测试参数所对应的字符是否为拉丁字母 #include int isalpha(int c); 测试参数所对应的字符是否为大写字母(isupper)或小写字母(islower) #include int isupper(int c); int islower(int c); 测试参数所对应的字符是否为阿拉伯数字(isdigit)或十六进制数字(isxdigit) #include int isdigit(int c); int isxdigit(int c);

Android开发优势总结

Android开发优势总结 来源:扣丁学堂 目前市场上的移动端有两种形式,一种是Android开发,另一种是ios开发,其中Android开发方面的人员要多一些,今天我们就一起来看一下扣丁学堂Android培训讲师解读的Android开发的优势。 Android开发优势: 1、Android价格占优,价廉性能并不低 消费者选择产品,价格是必然要考虑的一大因素,iphone虽好,但是价格让一般人望而却步。苹果就像是宝马、奔驰,虽然大家都认为它很好,但是一般人消费不起,只有看的份。而Android,如同大众,满大街跑的都是,不仅如此,还有一些型号是可以与宝马、奔驰相媲美的。虽然Android平台的手机价廉,但是其性能却一点也不低廉,触摸效果并不比苹果差到哪里去。Android平台简单实用,无论是功能还是外观设计,都可以与苹果一决高下。当消费者考虑价格因素之后,在数量众多的android手机中,消费者总是会找到一款满意的Android手机取代价格高昂的 iPhone。 2、应用程序发展迅速 智能机玩的就是个应用,虽然现在Android的应用还无法与苹果相竞争,但是随着Android的推广与普及,应用程序数在成数量级增长,Android应用在可预见的未来是有能力与苹果相竞争的。而来自Android 应用商店最大的优势是,不对应用程序进行严格的审查,在这一点上优于苹果。 3、智能手机厂家助力 苹果的自我中心是它成功的一大法宝,从硬件到软件,到其独特的推广方式。苹果形成了一个很好的很完整的产业链。在一个封闭的圈子中创造一个又一个的奇想,让消费者的体验得到了很大的满足。但是这样并不能使其长期占据有利位置。现在,世界很多智能手机厂家几乎都加入了Android阵营,并推出了一系列的Android智能机。摩托罗拉、三星、HTC、LG、Lumigon等厂家都与谷歌建立了Android平台技术联盟。厂商加盟的越多,手机终端就会越多,其市场潜力就越大。 4、运营商的鼎力支持 在国内,三大运营商是卯足了劲的推出Android智能机。联通的“0元购机”,电信的千元3G,移动的索爱A8i定制机,都显示了运营商对Android智能机的期望。在美国,T-Mobile、Sprint、AT&T和Verizon 全部推出了Android手机。此外,日本的KDDI,NTT DoCoMo,Telecom Italia(意大利电信)、T-Mobile (德

Linux知识点总结

第一章 1. Linux 是多用户、多任务操作系统。 2. 程序是计算机完成一项任务的指令集合。 3. 数据是由程序使用或生成的不同类型的信息。 4. 软件分为三大类: 1) 系统软件 2) 应用软件 3) 支撑软件 5. 系统软件包括操作系统、编译程序、汇编程序、数据库管理系统、网络软件等。系统软件对计算机系统的资源 进行控制、管理,并为用户的应用和其他程序的运行提供服务。 6. 支撑软件包括编辑程序、查错程序、项目管理程序等。辅助软件技术人员从事软件开发和项目管理人员进行项 目管理工作的软件。 7. 应用软件是为解决某一类应用需要或某个特定问题而设计的程序。 8. Linux 提供4 种不同的用户接口: 1) 命令行接口 2) 菜单 3) 图形用户接口 4) 程序接口 9. 命令解释程序称为shell 。 10. 程序接口也称为系统调用接口。系统调用时操作系统内核与用户程序、应用程序之间的接口。 11. 内核之外的程序都必须经由系统调用才能获得操作系统的服务。系统调用只能在C 程序中使用,不能作为命令 在终端上执行。由于系统调用能直接进入内核执行,所以执行效率很高。 12. Linux 解决资源使用过程中的冲突,保证资源最后能被系统再次使用所采取的方法: 1) 通过记录和文件加锁,保证数据的完整性 2) 利用调度进程和审计系统 3) 当系统出现错误时,提供错误诊断信息 4) 终止运行不正常的进程,甚至在最坏的情况下停止系统 13. 软件以是否以营利为目的分为三种模式: 1) 商业软件 2) 共享软件 3) 自由软件 14. Linux 用户分为: 1) 个人用 户2) 专业用 户 3) 商业用 户 15. Linux 的特点:(1 )与unix 系统兼容

复习材料《Android移动应用开发技术》

1、关于android进程,说法不正确的是( B ) A、组件运行所在的进程,是由androidManifest.xml决定,它可以指定该组件运行于哪个进程。 B、背景进程是不为用户所见的Activity,但是还会有可能被用户看到,所以它不能被杀死 C、当急需内存时,android会决定优先关闭那些空闲的进程 D、可视进程一般不会不被系统所杀死 2、Matrix类的作用( A ) A、可以存储缩小或放大比列 B、存储文件中的图片信息 C、存储资源中的图片信息 D、存储内存中的图片信息 3、关于主题的说法,错误的是( D ) A、它是属性集合 B、它可以在程序中来设置 C、它通常用于一个Activity或所有Activity上 D、它可以用于单个TextView上 4、setOnTouchEvent 设置返回值为true 和 false有何区别?以下说法较准确是( C ) A、没有区别,都能对事件进行监听 B、设置为true时只能在移动时获得一次监听事件,false则可以多次 C、设置为false是,在处理一次监听事件后,系统将抛弃该次事件 D、返回true表示这个消息已经被处理结束,后续的handler不再接收到这个消息 二、开发技术设计与应用能力部分 注:以下程序均是相关程序或小项目的实现代码,根据每个程序或项目的特性,完成程序空缺部分的内容,使其实现。具体程序代码注释省略。 图1 图2 图3 图4 1)电话实现[主界面如图1] 程序描述:完成手机打电话功能。 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/f27904806.html,yout.activity_main); Button btn_call = (Button)this.findViewById(R.id.btn_call); btn_call.setOnClickListener(new btnCall()); } private class btnCall implements OnClickListener (1) { public void onClick(View v) { // TODO Auto-generated method stub EditText et_number = (EditText) MainActivity.this.findViewById(R.id.et_number); String s_number = et_number.getText().toString().trim(); (2) Intent i_call = new Intent(); i_call.setAction(Intent.ACTION_CALL(3)); i_call.setData(Uri.parse("tel:"+s_number)); startActivity(i_call); (4) } } } 2)动画实现[主界面如图2] 程序描述:手机屏幕触摸后演示动画,假设XML文件已经设置好,id资源为:R.drawable.panda public class MainActivity extends Activity { ImageView iv_action; AnimationDrawable ad_action; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/f27904806.html,yout.activity_main); iv_action = (ImageView)this.findViewById(R.id.iv_action); iv_action.setBackgroundResource(5)(R.drawable.panda); ad_action = (AnimationDrawable) iv_action.getBackground(); } public boolean onTouchEvent(MotionEvent event) { ad_action.start();(6) return super.onTouchEvent(event); } } 3)撕衣服游戏实现 项目描述:划动屏幕时完成撕衣服效果,并产生撕衣服声音(sound.mp3) public class MainActivity extends Activity { ImageView iv_upper; ImageView iv_below;

基于android开发实验报告总结

基于android开发实验 报告总结 组员: 指导老师: 2016.12.15

目录 实验一 Android开发环境的搭建 (3) 1 实验目的及要求 (3) 2 实验设备(环境)及要求 (3) 3 实验内容 (3) 4 实验步骤 (3) 5 实验核心代码(关键代码),及调试中的问题 (4) 6 实验的运行结果及分析 (9) 3 实验设备(环境)及要求 (10) 实验三 GUI创建套件Widget的使用 (18) 1 实验目的及要求 (18) 2 实验设备(环境)及要求 (18) 3 实验内容 (19) 4 实验步骤 (19) 5 实验核心代码(关键代码),及调试中的问题 (19) 6 实验的运行结果及分析 (28) 实验四 SQLite应用 (29) 1 实验目的及要求 (29) 2 实验设备(环境)及要求 (30) 3 实验内容 (30) 4 实验步骤 (30) 5 实验核心代码(关键代码),及调试中的问题 (30) 6 实验的运行结果及分析 (41)

实验一 Android开发环境的搭建 1 实验目的及要求 1.搭建Eclipse+Android开发平台 2.创建简单的Android应用程序 3.创建Activity并利用intent的实现Activity的跳转 2 实验设备(环境)及要求 1)PC计算机 2)JDK安装包 3)Eclipse安装包 4)Android SDK安装包 5)ADT插件 3 实验内容 1)搭建Eclipse+Android开发环境 2)创建一个简单的”hello world”工程 3)创建两个Activity,实现简单的Activity之间的参数传递 4 实验步骤 1)下载安装JDK 1.6,配置环境变量,如果所示。

linux知识点总结

四:thread 1.什么是线程的detach状态?怎样设置? detach状态: 一般情况下,线程终止后,其终止状态一直保留到其它线程调用pthread_join获取它的状态为止。 但是线程也可以被置为detach状态,这样的线程一旦终止就立刻回收它占用的所有资源,而不保留终止状态。 不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL。 设置方法: 对一个尚未detach的线程调用pthread join或 pthread detach都可以把该线程置为detach状态,也就是 说,不能对同一线程调用两次pthread join,或者如果已经对一个线程调用了pthread detach就不能再调用 pthread_join了。 int pthread_detach(pthread_t tid); 返回值:成功返回0,失败返回错误号。 2.叙述函数pthread_join的功能。 函数pthread_join用来等待一个线程的结束,线程间同步的操作。 头文件: #include 函数定义: int pthread join(pthread t th, void **value_ptr ); th: 被等待线程的标识符 value_ptr :用户定义指针,用来存储被等待结束线程的返回值, 调用该函数的线程将挂起等待,直到id为th的线程终止。 3.进程中使用return、exit、pthread exit和pthread cancel分别起到什么作用?return,如果thread线程通过return返回,value_ptr所指向的单元里存放的是thread线程函数的返回值。 exit 终止整个进程。如果进程中的任一线程调用了exit,那么整个进程就会终止。

ANDROID实训心得体会

项目总结 时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我 们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平 都有很大的提高,我们非常感谢这次实训。 刚开始二周的高强度的课程安排让我们受益匪浅;接下来的项目实训又让我们可以巩固 了课程。这让我觉得实习生活充实而有意义。 乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观, 巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这 两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完 成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获 取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上 真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。 音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人, 都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队 的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具 体实践中,不仅加深我对理论的掌握和 运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。 这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到 感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发! 相信这些宝贵的经验会成为我今后成功的重要的基石。在此,我非常感谢指导老师和 同学对我的帮助。篇二:android实训报告 通信与电子信息专业实训报告 项目名称:基于android的游戏开发 班级 10通信1班 姓名 学号 指导教师 成绩 实训时间:年月日— 目录 一、实训目的及其意义 (3) 1.1、目的及意义 (3) 1.2、研究现状 (3) 二、实训主要任务、重点及难点 (4) 2.1、任务 (4) 2.2、重点内容及实现途径 (4) 三、实训具体内容及完成的主要工作 (5) 3.1、认识基础开发 (6) 3.2、了解数据存储 (6) 3.3、总体实训过程 (7) 四、实际遇到的困难,解决问题的方法和措施 (8) (一)、所遇问题 (8) (二)、解决方法与措施 (9) 五、心得体会 (9)

android开发试用期工作总结

android开发试用期工作总结篇一:android软件开发工程师转正个人总结 个人总结 我于XX年8月13日进入公司,根据公司的需要,目前担任Android软件工程师一职,负责综合代维,考务通手机客户端的开发工作。将近3个月的时候在这个新的工作环境我收获颇深。开始让我独立完成整个项目,这还是我的第一次,之前在公司是多人完成,过程中也遇到了许多困难,但是都一一解决了,我想这是我最宝贵的经历,通过三个月的不断学习,在项目开发中的不断锻炼以及同事、领导的帮助,我已逐渐融入这个大家庭,个人的工作技能也有了明显的提高,虽然仍有一些不足,但三个月以来我付出了不少,也收获了不少,我感觉自己成长了,也逐渐成熟了。 初到公司,加入了咨询与信息化部,加入了综合代维项目组,我也曾担心自己不知道该怎么与项目组的同事沟通,担心不知道怎么做好工作,但是项目组的前辈们都很亲切,也很耐心的教导我,解答我的疑问,以及他们团结向上的精神,让我很快的熟悉了工作,融入了项目组。 在这三个月的学习和工作中,我一直严格要求自己,遵循公司的规章制度,认真完成领导布置的每一项任务,遇到

的问题虚心的向项目组的前辈们学习、请教,不断的提高、充实自己。开发过程中出现的一些差错,也有前辈们耐心的指出和指导我修改,这些经历让我不断成熟,处理问题时考虑得更全面,杜绝类似情况的发生。在此我要特地感谢部门的领导和同事们对我的指引和帮助,感谢他们对我工作上失误的提醒和指正。 经过这三个月,我已经能独立进行开发任务,按时按质的完成分配的工作任务,当然还有许多不足,开发的经验仍有待提高,编写代码的简洁性和完整性也需要进一步增强,需要不断的继续学习以提高自己的工作能力。 总之,这三个月来我学到了很多,感悟了很多;看到公司的迅速发展,看到部门的同事越来越多,我深深地感到骄傲和自豪,也更加迫切的希望以一名正式员工的身份在这里工作,实现自己的奋斗目标,体现自己的人生价值,和公司一起成长。 我会用谦虚的态度和饱满的热情做好我的本职工作,为公司创造价值,同公司一起展望美好的未来! XX XX年11月13日 篇二:软件开发,试用期工作总结

分享我的Linux学习经验之路

分享我的Linux学习经验之路 相信正在看这篇文章的你一定跟我一样渴望去学习Linux技术,在此分享一下过去两年中我的一些学习体会,愿你也能够更顺利的成为一名Linuxer。 两年前正是毕业生找工作时段,阴差阳错下找到了个linux系统运维的工作(估计当时公司非常缺人,哈哈),接到录取通知后我才开始学习linux技术。然而,由于本科并不是计算机专业而我甚至对CPU,内存,硬盘等概念全都不清楚,也不知道究竟它们的功能究竟是什么。可以坦白的说,我的linux知识包括计算机基础全部都是工作后学习的(面临的压力可想而知…)。所以,如果你已对计算机有了一定的认识,请相信linux对于你不是难事;如果你像我一样不懂计算机或是没见过计算机(←_←应该没有吧),也请你有坚定的信念! 废话不多说,对于入门书籍,我推荐两本:《鸟哥的linux私房菜》和《Linux就该这么学》。 《鸟哥的linux私房菜》可以说是影响了一大批人,同样,我的入门书籍也是这本。对于计算机基础知识比较薄弱的人,可以看下这本书的一开始的章节,会令你对计算机有个初步的了解,不过这也使得它非常的厚重。如果你没有大把的空闲时间和雷打不通的定力,还是不要看了。 《Linux就该这么学》是我最近发现的一本书,用的系统是最新的RHEL7,可以说是与时俱进。通读了整本书,我将它定义成是 linux快速入门类书籍,相信也是很多运维人员需要的书籍。每个章节都非常的精悍,知识点也都非常到位,网站上也能下载到书籍里用到的软件。如果你像我一样希望快速入门linux,了解linux运维具体是做些什么的话,可以看下这本书。 当然,如果现在的我能穿越回过去,我会建议过去的我先看《Linux就该这么学》快速入门,然后再看其他的Linux技术书去细究每个知识点背后的逻辑。 对于初学者来说,学习过程中碰不到问题是不可能的,那么遇到障碍我们该怎么克服? 1)百度、谷歌搜索 通常你的问题并不只有你一个人碰到,问问度娘,问问谷歌,能搜出几百条答案来。 2)提问平台 搜不到想要的答案怎么办?那就去专有提问平台提问。百度知道,知乎,或是linux论坛等地方都是你的选择。但是!!请你懂得提问的艺术,提问平台没有非常多的互动,如果你想要得到一个满意的回复,至少让回答的人对你的测试环境有个初步了解,如说明用的是什么系统,多少版本等等。 3)加入微信群或QQ群提问 关于linux方面有很多社交群,QQ上搜个linux就有很多,而且相比起提问平台而言有了更多的互动。当然,最好是选择你看的书籍的社交群。例如,你学KVM那就加入KVM作者的群,如果你再学docker那就加入docker大牛的群,鸟哥的我倒不清楚有没有群,不过《linux就该这么学》这本书倒是有不少书友群,气氛也非常不错,加入这样的群的好处在于:在这个群里都是看过这本书籍,对书中的实验进行实操练习过的人,当你提问时,也许有人做实验时也碰到过同样的问题,大家更能理解你碰到的问题是什么。

最新Linux复习大汇总

第一章概述 1、什么是POSIX标准,为什么现代造作系统的设计必须遵循POSIX标准? 答:POSIX表示可移植操作系统接口(Portable Operating System Interface)。 POSIX是在Unix标准化过程中出现的产物。 POSIX 1003.1标准定义了一个最小的Unix操作系统接口。 任何操作系统只有符合这一标准,才有可能运行Unix程序。 2、什么是GNU?Linux与GNU有什么关系? 答:GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。 GNU项目产品包括emacs编辑器、著名的GNU C和Gcc编译器等,这些软件叫做GNU 软件。 GNU软件和派生工作均适用GNU通用公共许可证,即GPL(General Public License)。 Linux的开发使用了众多的GUN工具。 3、Linux系统由哪些部分组成?Linux内核处于什么位置? 答:(1)符合POSIX标准的操作系统内核、Shell和外围工具。(2)C语言编译器和其他开发工具及函数库。(3)X Window窗口系统。(4)各种应用软件,包括字处理软件、图象处理软件等。 Linux内核是所有Linux 发布版本的核心。 第二章内存寻址 1、在80x86的寄存器中,哪些寄存器供一般用户使用?哪些寄存器只能被操作系统使用?答:通用寄存器EAX,EBX,ECX,EDX,EBP(基址指针),ESP(堆栈指针),ESI(扩展源指针),EDI(扩展目的指针),还有EFLAGS(标志寄存器). 专供操作系统使用的寄存器:IDTR中断描述符寄存器,GDTR全局描述符表寄存器,LDTR 局部描述符表寄存器,TaskRegisters任务寄存器,DebugRegister调试寄存器,ControlRegister 控制寄存器,Model-SpecificRegisters模型专用寄存器。 3、请用C语言描述段描述符表。 答:#include #include #define BASE_H 0xff00 #define BASE_M 0x00ff #define BASE_L 0xffff #define LIMIT_H 0x000f

相关文档
最新文档