如何利用数学史引发学生学习数学的兴趣案例博客

如何利用数学史引发学生学习数学的兴趣案例博客,第1张

王见定教授挑战“数学突破奖"

数学史上那些研究成果对推动人类社会进步有很大作用

(四)申报“数学突破奖”的理由

1983年王见定教授在世界上首次提出半解析函数理论,1988年又首次提出并系统建立了共轭解析函数理论,并将这两项理论成功地应用于电场、磁场、流体力学、d性力学等领域。此两项理论受到众多专家、学者的引用和发展,并由此引发双解析函数、复调和函数、多解析函数(K阶解析函数)、半双解析函数、半共轭解析函数以及相应的边值问题,微分方程、积分方程等一系列数学分支的产生,而且这种发展势头强劲有力、不可阻挡。这也是中国学者对发展世界数学作出的前所未有的大范围的原创工作。

王见定教授的半解析函数、共轭解析函数理论及其影响是:柯西、黎曼、维尔斯特拉斯、高斯、欧拉等世界数学大师开创的解析函数理论的推广和发展,18、19世纪乃至20世纪的广大数学家几乎都在解析函数领域留下了他们的足迹。

王见定教授在数学上的另一个重大贡献是:王见定教授指出:社会统计学描述的是变量,数理统计学描述的是随机变量,而变量和随机变量是两个既有区别又有联系,且在一定条件下可以互相转化的数学概念。王见定教授的这一论述在数学上就是一个巨大的发现。我们知道“变量”的概念是17世纪由著名数学家笛卡尔首先提出,而随机变量是20世纪30年代以后由苏联学者首先提出,两个概念的首次提出相差三个世纪。截止到王见定教授,世界上还没有第二个人提出变量和随机变量两者的联系、区别以及相互转化。

我们知道变量的提出造就了一系列的函数论、方程论、微积分等重大数学学科的产生和发展,进而引发了世界范围内新的工业革命的兴起。而随机变量的提出则奠定了概率论、数理统计以及信息论、系统论、控制论等科学的产生和发展,从而引发了全球范围内的高科技时代的诞生。可见变量、随机变量的概念的提出的价值何等重大,从而把王见定教授在世界上首次提出变量随机变量的联系、区别以及相互的转化的意义称之为巨大,也就不视为过。

下面我们回到:“社会统计学和数理统计学的统一”理论上来。王见定教授指出社会统计学描述的是变量,数理统计学描述的是随机变量,这样王见定教授准确地界定了社会统计学和数理统计学各自研究的范围,以及在一定条件下可以相互转化的关系,这是对统计学的最大贡献。它结束了近四百年来几十种甚至上百种以上五花八门种类的统计学混战的局面,使它们回到正确的轨道上来。

由于变量不断的出现且永远地继续下去,所以社会统计学不仅不会消亡,而且会不断地发展壮大。数理统计学也会由于随机变量的不断出现同样发展壮大。但是,对随机变量的研究一般来说比对变量的研究复杂得多,而且直到今天数理统计的研究尚处在较低水平,且使用起来比较复杂,再从长远的研究来看,对随机变量的研究最终会逐步转化为对变量的研究,这与我们通常研究复杂问题转化为若干简单问题研究的道理是一样的。既然社会统计学描述的是变量,而变量描述的范围是极其宽广的,绝非某些数理统计学者所云:社会统计学只做简单的加减乘除。从理论上讲,社会统计学应该覆盖除了数理统计学之外的绝大多数数学学科的运作。比如说最有实用价值的微积分也包含在内,因为微积分描述的也是变量。所以王见定教授提出的:“社会统计学与数理统计学统一”的理论,从根本上纠正了统计学界长期存在的低估社会统计学的错误学说,并从理论和应用上论证了社会统计学的广阔前景。

由于统计学现已上升到方法论的地位,所以新的统计学理论将对所有科学的发展起到不可估量的作用,可见王见定教授在数学上的发现是巨大的,而不是重大的。

本文中,我们将进行大量的编程——但在这之前,我们先介绍一下我们今天要解决的实例问题。

1) 预测房子价格

我们想预测特定房子的价值,预测依据是房屋面积。

2) 预测下周哪个电视节目会有更多的观众

闪电侠和绿箭侠是我最喜欢的电视节目。我想看看下周哪个节目会有更多的观众。

3) 替换数据集中的缺失值

我们经常要和带有缺失值的数据集打交道。这部分没有实战例子,不过我会教你怎么去用线性回归替换这些值。

所以,让我们投入编程吧(马上)

在动手之前,去把我以前的文章(Python Packages for Data Mining)中的程序包安装了是个好主意。

1) 预测房子价格

我们有下面的数据集:

输入编号

平方英尺

价格

1    150    6450    

2    200    7450    

3    250    8450    

4    300    9450    

5    350    11450    

6    400    15450    

7    600    18450    

步骤:

在线性回归中,我们都知道必须在数据中找出一种线性关系,以使我们可以得到θ0和θ1。 我们的假设方程式如下所示:

其中: hθ(x)是关于特定平方英尺的价格值(我们要预测的值),(意思是价格是平方英尺的线性函数); θ0是一个常数; θ1是回归系数。

那么现在开始编程:

步骤1

打开你最喜爱的文本编辑器,并命名为predict_house_pricepy。 我们在我们的程序中要用到下面的包,所以把下面代码复制到predict_house_pricepy文件中去。

Python

1

2

3

4

5

# Required Packages

import matplotlibpyplot as plt

import numpy as np

import pandas as pd

from sklearn import datasets, linear_model

运行一下你的代码。如果你的程序没错,那步骤1基本做完了。如果你遇到了某些错误,这意味着你丢失了一些包,所以回头去看看包的页面。 安装博客文章中所有的包,再次运行你的代码。这次希望你不会遇到任何问题。

现在你的程序没错了,我们继续……

步骤2

我把数据存储成一个csv文件,名字为input_datacsv 所以让我们写一个函数把数据转换为X值(平方英尺)、Y值(价格)

Python

1

2

3

4

5

6

7

8

9

# Function to get data

def get_data(file_name):

data = pdread_csv(file_name)

X_parameter = []

Y_parameter = []

for single_square_feet ,single_price_value in zip(data['square_feet'],data['price']):

X_parameterappend([float(single_square_feet)])

Y_parameterappend(float(single_price_value))

return X_parameter,Y_parameter

第3行:将csv数据读入Pandas数据帧。

第6-9行:把Pandas数据帧转换为X_parameter和Y_parameter数据,并返回他们。

所以,让我们把X_parameter和Y_parameter打印出来:

Python

1

2

3

[[1500], [2000], [2500], [3000], [3500], [4000], [6000]]

[64500, 74500, 84500, 94500, 114500, 154500, 184500]

[Finished in 07s]

脚本输出: [[1500], [2000], [2500], [3000], [3500], [4000], [6000]] [64500, 74500, 84500, 94500, 114500, 154500, 184500] [Finished in 07s]

步骤3

现在让我们把X_parameter和Y_parameter拟合为线性回归模型。我们要写一个函数,输入为X_parameters、Y_parameter和你要预测的平方英尺值,返回θ0、θ1和预测出的价格值。

Python

1

2

3

4

5

6

7

8

9

10

11

12

# Function for Fitting our data to Linear model

def linear_model_main(X_parameters,Y_parameters,predict_value):

# Create linear regression object

regr = linear_modelLinearRegression()

regrfit(X_parameters, Y_parameters)

predict_outcome = regrpredict(predict_value)

predictions = {}

predictions['intercept'] = regrintercept_

predictions['coefficient'] = regrcoef_

predictions['predicted_value'] = predict_outcome

return predictions

第5-6行:首先,创建一个线性模型,用我们的X_parameters和Y_parameter训练它。

第8-12行:我们创建一个名称为predictions的字典,存着θ0、θ1和预测值,并返回predictions字典为输出。

所以让我们调用一下我们的函数,要预测的平方英尺值为700。

Python

1

2

3

4

5

6

X,Y = get_data('input_datacsv')

predictvalue = 700

result = linear_model_main(X,Y,predictvalue)

print "Intercept value " , result['intercept']

print "coefficient" , result['coefficient']

print "Predicted value: ",result['predicted_value']

脚本输出:Intercept value 177180851064 coefficient [ 2877659574] Predicted value: [ 2191542553191] [Finished in 07s]

这里,Intercept value(截距值)就是θ0的值,coefficient value(系数)就是θ1的值。 我们得到预测的价格值为219154255——意味着我们已经把预测房子价格的工作做完了!

为了验证,我们需要看看我们的数据怎么拟合线性回归。所以我们需要写一个函数,输入为X_parameters和Y_parameters,显示出数据拟合的直线。

Python

1

2

3

4

5

6

7

8

9

10

# Function to show the resutls of linear fit model

def show_linear_line(X_parameters,Y_parameters):

# Create linear regression object

regr = linear_modelLinearRegression()

regrfit(X_parameters, Y_parameters)

pltscatter(X_parameters,Y_parameters,color='blue')

pltplot(X_parameters,regrpredict(X_parameters),color='red',linewidth=4)

pltxticks(())

pltyticks(())

pltshow()

那么调用一下show_linear_line函数吧:

Python

1

show_linear_line(X,Y)

脚本输出:

2)预测下周哪个电视节目会有更多的观众

闪电侠是一部由剧作家/制片人Greg Berlanti、Andrew Kreisberg和Geoff Johns创作,由CW电视台播放的美国电视连续剧。它基于DC漫画角色闪电侠(Barry Allen),一个具有超人速度移动能力的装扮奇特的打击犯罪的超级英雄,这个角色是由Robert Kanigher、John Broome和Carmine Infantino创作。它是绿箭侠的衍生作品,存在于同一世界。该剧集的试播篇由Berlanti、Kreisberg和Johns写作,David Nutter执导。该剧集于2014年10月7日在北美首映,成为CW电视台收视率最高的电视节目。

绿箭侠是一部由剧作家/制片人 Greg Berlanti、Marc Guggenheim和Andrew Kreisberg创作的电视连续剧。它基于DC漫画角色绿箭侠,一个由Mort Weisinger和George Papp创作的装扮奇特的犯罪打击战士。它于2012年10月10日在北美首映,与2012年末开始全球播出。主要拍摄于Vancouver、British Columbia、Canada,该系列讲述了亿万花花公子Oliver Queen,由Stephen Amell扮演,被困在敌人的岛屿上五年之后,回到家乡打击犯罪和腐败,成为一名武器是弓箭的神秘义务警员。不像漫画书中,Queen最初没有使用化名”绿箭侠“。

由于这两个节目并列为我最喜爱的电视节目头衔,我一直想知道哪个节目更受其他人欢迎——谁会最终赢得这场收视率之战。 所以让我们写一个程序来预测哪个电视节目会有更多观众。 我们需要一个数据集,给出每一集的观众。幸运地,我从维基百科上得到了这个数据,并整理成一个csv文件。它如下所示。

闪电侠

闪电侠美国观众数

绿箭侠

绿箭侠美国观众数

1    483    1    284    

2    427    2    232    

3    359    3    255    

4    353    4    249    

5    346    5    273    

6    373    6    26    

7    347    7    264    

8    434    8    392    

9    466    9    306    

观众数以百万为单位。

解决问题的步骤:

首先我们需要把数据转换为X_parameters和Y_parameters,不过这里我们有两个X_parameters和Y_parameters。因此,把他们命名为flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter吧。然后我们需要把数据拟合为两个不同的线性回归模型——先是闪电侠,然后是绿箭侠。 接着我们需要预测两个电视节目下一集的观众数量。 然后我们可以比较结果,推测哪个节目会有更多观众。

步骤1

导入我们的程序包:

Python

1

2

3

4

5

6

7

# Required Packages

import csv

import sys

import matplotlibpyplot as plt

import numpy as np

import pandas as pd

from sklearn import datasets, linear_model

步骤2

写一个函数,把我们的数据集作为输入,返回flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter values。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

# Function to get data

def get_data(file_name):

data = pdread_csv(file_name)

flash_x_parameter = []

flash_y_parameter = []

arrow_x_parameter = []

arrow_y_parameter = []

for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):

flash_x_parameterappend([float(x1)])

flash_y_parameterappend(float(y1))

arrow_x_parameterappend([float(x2)])

arrow_y_parameterappend(float(y2))

return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter

现在我们有了我们的参数,来写一个函数,用上面这些参数作为输入,给出一个输出,预测哪个节目会有更多观众。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# Function to know which Tv show will have more viewers

def more_viewers(x1,y1,x2,y2):

regr1 = linear_modelLinearRegression()

regr1fit(x1, y1)

predicted_value1 = regr1predict(9)

print predicted_value1

regr2 = linear_modelLinearRegression()

regr2fit(x2, y2)

predicted_value2 = regr2predict(9)

#print predicted_value1

#print predicted_value2

if predicted_value1 > predicted_value2:

print "The Flash Tv Show will have more viewers for next week"

else:

print "Arrow Tv Show will have more viewers for next week"

把所有东西写在一个文件中。打开你的编辑器,把它命名为predictionpy,复制下面的代码到predictionpy中。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

# Required Packages

import csv

import sys

import matplotlibpyplot as plt

import numpy as np

import pandas as pd

from sklearn import datasets, linear_model

# Function to get data

def get_data(file_name):

data = pdread_csv(file_name)

flash_x_parameter = []

flash_y_parameter = []

arrow_x_parameter = []

arrow_y_parameter = []

for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):

flash_x_parameterappend([float(x1)])

flash_y_parameterappend(float(y1))

arrow_x_parameterappend([float(x2)])

arrow_y_parameterappend(float(y2))

return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter

# Function to know which Tv show will have more viewers

def more_viewers(x1,y1,x2,y2):

regr1 = linear_modelLinearRegression()

regr1fit(x1, y1)

predicted_value1 = regr1predict(9)

print predicted_value1

regr2 = linear_modelLinearRegression()

regr2fit(x2, y2)

predicted_value2 = regr2predict(9)

#print predicted_value1

#print predicted_value2

if predicted_value1 > predicted_value2:

print "The Flash Tv Show will have more viewers for next week"

else:

print "Arrow Tv Show will have more viewers for next week"

x1,y1,x2,y2 = get_data('input_datacsv')

#print x1,y1,x2,y2

more_viewers(x1,y1,x2,y2)

可能你能猜出哪个节目会有更多观众——但运行一下这个程序看看你猜的对不对。

3) 替换数据集中的缺失值

有时候,我们会遇到需要分析包含有缺失值的数据的情况。有些人会把这些缺失值舍去,接着分析;有些人会用最大值、最小值或平均值替换他们。平均值是三者中最好的,但可以用线性回归来有效地替换那些缺失值。

这种方法差不多像这样进行。

首先我们找到我们要替换那一列里的缺失值,并找出缺失值依赖于其他列的哪些数据。把缺失值那一列作为Y_parameters,把缺失值更依赖的那些列作为X_parameters,并把这些数据拟合为线性回归模型。现在就可以用缺失值更依赖的那些列预测缺失的那一列。

一旦这个过程完成了,我们就得到了没有任何缺失值的数据,供我们自由地分析数据。

为了练习,我会把这个问题留给你,所以请从网上获取一些缺失值数据,解决这个问题。一旦你完成了请留下你的评论。我很想看看你的结果。

个人小笔记:

我想分享我个人的数据挖掘经历。记得在我的数据挖掘引论课程上,教师开始很慢,解释了一些数据挖掘可以应用的领域以及一些基本概念。然后突然地,难度迅速上升。这令我的一些同学感到非常沮丧,被这个课程吓到,终于扼杀了他们对数据挖掘的兴趣。所以我想避免在我的博客文章中这样做。我想让事情更轻松随意。因此我尝试用有趣的例子,来使读者更舒服地学习,而不是感到无聊或被吓到。

谢谢读到这里——请在评论框里留下你的问题或建议,我很乐意回复你。

没有

恒增函数,就是对区间任意x1>x2,恒有y1>y2

闭区间呢?

也没有极值点。因为函数的极值不能在区间的端点取得。

百度一下:ok吧_博客_百度空间 欢迎访问我的博客!函数salon

  Commands:命令

  Actions: 动作

  Triggers: 触发条件

  Services: 服务

  Options: 选项

  Propertise: 属性

  (1) Commands是一些基本的 *** 作,例如:

  mkdir /sdcard 0000 system system mkdir /system

  mkdir /data 0771 system system

  mkdir /cache 0770 system cache

  mkdir /config 0500 root root

  mkdir /sqlite_stmt_journals 01777 root root

  mount tmpfs tmpfs /sqlite_stmt_journals size=4m

  这些命令在init可执行程序中被解析,然后调用相关的函数来实现。

  (2) Actions(动作)表示一系列的命令,通常在Triggers(触发条件)中调用,动作和触发条件的形式为:

  on

  

  

  

  动作的使用示例如下:

  on init

  export PATH /sbin:/system/sbin:/system/bin:/system/xbin

  mkdir /system

  init表示一个触发条件,这个触发事件发生后,进行设置环境变量和建立目录的 *** 作称为一个“动作”

  (3) Services(服务)通常表示启动一个可执行程序,Options(选项)是服务的附加内容,用于配合服务使用。

  service vold /system/bin/vold

  socket vold stream 0660 root mount

  service bootsound /system/bin/playmp3

  user media

  group audio

  oneshot

  vold和bootsound分别是两个服务的名称,/system/bin/vold和/system /bin/playmp3分别是他们所对应的可执行程序。

  socket、user、group、oneshot就是配合服务使用的选项。其中oneshot选项表示该服务只启动一次,而如果没有oneshot选项,

  这个可执行程序会一直存在--如果可执行程序被杀死,则会重新启动。

  (4) Properties(属性)是系统中使用的一些值,可以进行设置和读取。

  setprop roFOREGROUND_APP_MEM 1536

  setprop roVISIBLE_APP_MEM 2048

  on property:rokernelqemu=1

  start adbd

  setprop 用于设置属性,on property可以用于判断属性,这里的属性在整个Android系统运行中都是一致的。

  init脚本的关键字可以参考init进程的system/core/init/keywordh文件。

  initrc的使用方法,可以参考说明文件system/core/init/readmetxt

  如果想要修改启动过程只需要修改initc(system/core/init)或者initrc里的内容即可

  如何去写

  Android initrc (Android init language)

  Android 初始化语言由四大类声明组成 : 行为类 (Actions), 命令类 (Commands) ,服务类 (Services), 选项类 (Options)

   初始化语言以行为单位,由以空格间隔的语言符号组成。 C 风格的反斜杠转义符可以用来插入空白到语言符号。双引号也可以用来防止文本被空格分成多个语言符号。当反斜杠在行末时,作为折行符。

   以 # 开始 ( 前面允许有空格 ) 的行为注释行。

   Actions 和 Services 隐含声明一个新的段落。所有该段落下 Commands 或 Options 的声明属于该段落。第一段落前的 Commands 或Options 被忽略。

   Actions 和 Services 拥有独一无二的命名。在它们之后声明相同命名的类将被当作错误并忽略。

  Actions

  -------

  Actions 是一系列命令的命名。 Actions 拥有一个触发器 (trigger) 用来决定 action 何时执行。当一个 action 在符合触发条件被执行时,如果它还没被加入到待执行队列中的话,则加入到队列最后。

  队列中的 action 依次执行, action 中的命令也依次执行。 Init 在执行命令的中间处理其它活动 ( 设备创建 / 销毁 ,property 设置,进程重启) 。

  Actions 表现形式为:

  on

  

  

  

  

  Services

  --------

  Services 是由 init 启动,在它们退出时重启 ( 可选 ) 。 Service 表现形式为 :

  service [ ]

  

  

  

  

  Options

  -------

  Options 是 Services 的修饰,它们影响 init 何时、如何运行 service

  

  critical

  这是一个设备关键服务 (device-critical service) 如果它在 4 分钟内退出超过 4 次,设备将重启并进入恢复模式。

  

  disabled

  这个服务的级别将不会自动启动,它必须被依照服务名指定启动才可以启动。

  

  setenv

  设置已启动的进程的环境变量 的值

  

  socket [ [ ] ]

  创建一个名为 /dev/socket/ 的 unix domin socket ,并传送它的 fd 到已启动的进程。 必须为 "dgram" 或 "stream" 用户和组默认为 0

  

  user

  在执行服务前改变用户名。当前默认为 root 如果你的进程需要 linux 能力,你不能使用这个命令。你必须在还是 root 时请求能力,并下降到你需要的 uid

  

  group [ ]

  在执行服务前改变组。在第一个组后的组将设为进程附加组 ( 通过 setgroups()) 当前默认为 root

  

  oneshot

  在服务退出后不重启。

  

  class

  为 service 指定一个类别名。同样类名的所有的服务可以一起启动或停止。如果没有指定类别的服务默认为 "default" 类。

  

  onrestart

  当服务重启时执行一个命令。

  

  Triggers

  --------

  Triggers( 触发器 ) 是一个字符串,可以用来匹配某种类型的事件并执行一个 action 。

  

  boot

  这是当 init 开始后执行的第一个触发器 ( 当 /initconf 被加载 )

  

  =

  当 property 被设为指定的值 时触发。

  

  device-added-

  device-removed-

  当设备节点被添加或移除时触发。

  

  service-exited-

  当指定的服务存在时触发

  

  

  Commands

  --------

  

  exec [ ]

  Fork 并执行一个程序 () 这将被 block 直到程序执行完毕。最好避免执行例如内建命令以外的程序,它可能会导致 init 被阻塞不动。

  

  export

  设定全局环境变量 的值 ,当这个命令执行后所有的进程都可以取得。

  

  ifup

  使网络接口 联机。

  

  import

  解析一个 init 配置文件,扩展当前配置文件。

  

  hostname

  设置主机名

  

  chmod

  改变文件访问权限

  

  chown

  改变文件所属和组

  

  class_start

  当指定类别的服务没有运行,启动该类别所有的服务。

  

  class_stop

  当指定类别的服务正在运行,停止该类别所有的服务。

  

  domainname

  设置域名。

  

  insmod

  加载该路径 的模块

  

  mkdir [mode] [owner] [group]

  在 创建一个目录 , 可选选项 :mod,owner,group 如果没有指定,目录以 755 权限, owner 为 root,group 为 root 创建

  

  mount

  [ ]

  尝试 mount 到目录

   可以用 mtd@name 格式以命名指定一个 mtd 块设备。 包含"ro","rw","remount","noatime"

  例如:

  mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/mmcblk1p1 /SD1

  chown system system /SD1

  chmod 0777 /SD1

  mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/mmcblk1p6 /SD3

  chown system system /SD3

  chmod 0777 /SD3

  setkey

  暂时没有

  

  setprop

  设置系统 property 的值

  

  setrlimit

  设置 resource 的 rlimit

  

  start

  启动一个没有运行的服务。

  

  stop

  停止一个正在运行的服务。

  

  symlink

  创建一个 的符号链接到

  

  sysclktz

  设置系统时区 (GMT 为 0)

  

  trigger

  触发一个事件。用于调用其它 action 。

  

  write [ ]

  打开 的文件并写入一个或多个字符串。

  Properties

  ----------

  Init 会更新一些系统 property 以提供查看它正在干嘛。

  initaction

  当前正在执行的 action, 如果没有则为 ""

  

  initcommand

  被执行的命令,如果没有则为 ""

  

  initsvc

  命名为 的服务的状态 ("stopped", "running", "restarting")

  

  

  initrc 示例 :

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

  

  # not complete -- just providing some examples of usage

  #

  on boot

  export PATH /sbin:/system/sbin:/system/bin

  export LD_LIBRARY_PATH /system/lib

  

  mkdir /dev

  mkdir /proc

  mkdir /sys

  

  mount tmpfs tmpfs /dev

  mkdir /dev/pts

  mkdir /dev/socket

  mount devpts devpts /dev/pts

  mount proc proc /proc

  mount sysfs sysfs /sys

  

  write /proc/cpu/alignment 4

  

  ifup lo

  

  hostname localhost

  domainname localhost

  

  mount yaffs2 mtd@system /system

  mount yaffs2 mtd@userdata /data

  

  import /system/etc/initconf

  

  class_start default

  

  service adbd /sbin/adbd

  user adb

  group adb

  

  service usbd /system/bin/usbd -r

  user usbd

  group usbd

  socket usbd 666

  

  service zygote /system/bin/app_process -Xzygote /system/bin --zygote

  socket zygote 666

  

  service runtime /system/bin/runtime

  user system

  group system

  

  on device-added-/dev/compass

  start akmd

  

  on device-removed-/dev/compass

  stop akmd

  

  service akmd /sbin/akmd

  disabled

  user akmd

  group akmd

  

  调试

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

  默认情况下, init 执行的程序输出的信息和错误到 /dev/null 为了 debug ,你可以通过 Android 程序 logwrapper 执行你的程序。这将复位向输出 / 错误输出到 Android logging 系统 ( 通过 logcat 访问 ) 。

  

  

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

  Android——initrc脚本

  

  在Android中使用启动脚本initrc,可以在系统的初始化中进行简单的 *** 作。

  initrc启动脚本路径:system/core/rootdir/initrc

  内容:

  Commands:命令

  Actions:动作

  Triggers:触发条件

  Services:服务

  Options:选项

  Properties:属性

  Commands是一些基本 *** 作。如:

  mkdir /system

  mkdir /data 0771 system system

  mkdir /persist 0771 system system

  devwait /dev/block/mmcblk0p12

  mount ext3 /dev/block/mmcblk0p

  Action表示一系列命令,通常在Triggers中调用,如:

  on init //表示一个触发条件

  sysclktz 0

  loglevel 3

  # setup the global environment

  export PATH /sbin:/system/sbin:/system/bin:/system/xbin

  export LD_LIBRARY_PATH /system/lib

  export ANDROID_BOOTLOGO 1

  Services通常表示启动一个可执行程序,Options是服务的附加内容,用于配合服务使用。

  service vold /system/bin/vold //vold是服务名称,/system/bin/vold是所对应的可执行程序。

  socket vold stream 0660 root mount //socket是配合服务使用的选项

  ioprio be 2

  service netd /system/bin/netd

  socket netd stream 0660 root system

  配合服务使用的选项有socket,user,group,oneshot。

  oneshot表示该服务只启动一次,而如果没有oneshot选项,这个可执行程序将一直存在——如果可执行程序被杀死,则会重新启动。

  Properties是系统中使用的一些值,可以进行设置和读写。

  setprop roHIDDEN_APP_MEM 5120 //setprop用于设置属性

  setprop roCONTENT_PROVIDER_MEM 5632

  setprop roEMPTY_APP_MEM 6144

  

  on property:rokernelqemu=1 //on property用于判断属性

  start adbd

  这里的属性在整个android系统运行中都是一致的。

  init脚本的关键字可以参考init进程中的system/core/init/keywordh文件。如:

  KEYWORD(chroot, COMMAND, 1, do_chroot) //chroot是命令,do_chroot()是调用的函数,这个函数在init进程中的system/core/init/builtinsc文件中定义。

  例如:

  service akmd /system/bin/logwrapper /sbin/akmd

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12156218.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存