kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

内核模块编译怎样绕过insmod时的版本检查

http://blog.sina.com.cn/s/blog_53931eca01015uky.html

在開發kernel driver時,總是會遇到討人厭的vermagic檢查,只要目前在run的kernel版本跟driver編譯時用的kernel版本不一致,就沒辦法insmod。

1
2
3
4
bash-3.2# insmod sdio.ko
sdio: version magic '2.6.28-271-gec75a15 preempt mod_unload modversions ARMv7 '
should be '2.6.28 preempt mod_unload ARMv7 '
insmod: init_module 'sdio.ko' failed (Exec format error)

這大大降低了開發速度,尤其是當你拿不到客戶在用的kernel時,又要開發driver給他用,真的是很麻煩……

那麼要怎麼利用噁心的方式繞過去呢???

一、先把 Moudle version 檢查關掉。
1
2
3
4
5
6
7
user@host # ARCH=arm make menuconfig
--- Enable loadable module support                                             │ │
│ │         [ ]   Forced module loading                                      │ │
│ │         [*]   Module unloading                                           │ │
│ │         [*]     Forced module unloading                                  │ │
│ │         [ ]   Module versioning support                                  │ │
│ │         [ ]   Source checksum for all modules
二、 使用modinfo時,可以看到目前這driver的vermagic
1
2
3
4
5
6
7
8
filename: external_drivers/omap3530/Linux/sdio/sdio.ko
author: Texas Instruments Inc
alias: TIWLAN_SDIO
license: GPL
description: TI WLAN SDIO driver
depends:
vermagic: 2.6.28-271-gec75a15 preempt mod_unload ARMv7
parm: g_sdio_debug_level:debug level (int)
三、 修改 kernel 的 vermagic,再重新編譯driver

vermagic 的第一個值 2.6.28-noneed 是由這 include/linux/utsrelease.h裡的 UTS_RELEASE 所定義。

1
#define UTS_RELEASE "2.6.28-271-gec75a15"

之後再由 include/linux/vermagic.h 裡的 macro
去組合出 VERMAGIC_STRING , 也就是 kernel 的vermagic。

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
#include <generated/utsrelease.h>

#ifdef CONFIG_SMP
#define MODULE_VERMAGIC_SMP "SMP "
#else
#define MODULE_VERMAGIC_SMP ""
#endif
#ifdef CONFIG_PREEMPT
#define MODULE_VERMAGIC_PREEMPT "preempt "
#else
#define MODULE_VERMAGIC_PREEMPT ""
#endif完成編譯後,你就可以得
#ifdef CONFIG_MODULE_UNLOAD
#define MODULE_VERMAGIC_MODULE_UNLOAD "mod_unload "
#else
#define MODULE_VERMAGIC_MODULE_UNLOAD ""
#endif
#ifndef CONFIG_MODVERSIONS
#define MODULE_VERMAGIC_MODVERSIONS "modversions "
#else
#define MODULE_VERMAGIC_MODVERSIONS ""
#endif
#ifndef MODULE_ARCH_VERMAGIC
#define MODULE_ARCH_VERMAGIC ""
#endif

#define VERMAGIC_STRING \
UTS_RELEASE " " \
MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \
MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS \
MODULE_ARCH_VERMAGIC

所以, 我們只要把 UTS_RELEASE 改成我們的數字即可,當然若是懶得去try組合後的字串,也可以直接將VERMAGIC_STRING改成你要的字串

建議修改完 vermagic.h, utsrelease.h後,還是把kernel重編完再編kernel,比較保險。

以下是修改後,用modinfo看的結果

1
2
3
4
5
6
7
8
filename: external_drivers/omap3530/Linux/sdio/sdio.ko
author: Texas Instruments Inc
alias: TIWLAN_SDIO
license: GPL
description: TI WLAN SDIO driver
depends:
vermagic: 2.6.28 preempt mod_unload ARMv7
parm: g_sdio_debug_level:debug level (int)


另外若你是用git 做版本控制 , 那就會出現git的版本號在kernel 編號上
所以要把他關掉

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
General setup  --->
 [ ] Automatically append version information to the version strin

解釋;
CONFIG_LOCALVERSION_AUTO:                                                   │ 
  │                                                                         │ 
  │ This will try to automatically determine if the current tree is a       │ 
  │ release tree by looking for git tags that belong to the current         │ 
  │ top of tree revision.                                                   │ 
  │                                                                         │ 
  │ A string of the format -gxxxxxxxx will be added to the localversion     │ 
  │ if a git-based tree is found.  The string generated by this will be     │ 
  │ appended after any matching localversion* files, and after the value    │ 
  │ set in CONFIG_LOCALVERSION.                                             │ 
  │                                                                         │ 
  │ (The actual string used here is the first eight characters produced     │ 
  │ by running the command:                                                 │ 
  │                                                                         │ 
  │ which is done within the script "scripts/setlocalversion".)             │ 
  │                                                                         │ 
  │ Symbol: LOCALVERSION_AUTO [=y]                                          │ 
  │ Prompt: Automatically append version information to the version string  │ 
  │   Defined at init/Kconfig:84                                            │ 
  │   Location:                                                             │ 
  │ ingT

moto sbf包

解出的CG35.smg或CG35.img是boot.img, boot.img可以按照 这里 的方式编辑

注意: motorola只有一些新的机型有方法解bootloader锁,沒解锁的bootloader会验证boot、recovery等分区的完整性(两个分区都是8M),不管有用的数据还是没用的数据都加入验证(好像是隔段距离取点数据做验证,因为替换最后100字节可以刷成功,替换多点就失败。可是实际有用的boot.img大小才4M左右)。

MOTO X解BL锁教程 http://bbs.gfan.com/android-6726986-1-1.html

1 命令行解包

1
./sbf_flash -x OLYFR_U4_1.8.3_SIGNED_OLPSATTSPE_P013_HWolympus_1g_Service1FF.sbf

提取到一堆img文件

2神器:MotoAndroidDepacker

http://www.veryhuo.com/down/html/47416.html

就是这个软件,可以把moto的底包解开。
使用很简单:
1 点open from file菜单打开sbf底包,然后点split to files就解开了
2 将要打包的文件拷到单独的文件夹A,然后点open files,选择刚刚的文件夹A,然后点compile file,就会在文件夹A里面生成result\firmware.sbf文件

解包出的文件解释:

1
2
3
4
5
6
7
8
9
CG31/CDT是描述各文件版本号的, 相当于注释文件
CG33/CDROM是个ISO文件, 可以用WinRAR之类的打开, 包含PC端程序(MotoHelperAgent)
CG35/Boot包含了系统内核<-boot-only就是这个
CG39/system分区
CG40/cache缓存分区(国行多余的部分), 显然里面什么都没有
CG45/Baseband基带固件
CG47/Recovery就是官方恢复, 里面也包含独立的内核, 但不用于启动
CG61/devtree包含设备描述符
RAMDLD/RamDisk&tmpfs, Android/Linux启动初始化的一部分, 不涉及具体设备

这篇感觉没用 http://bbs.ihei5.com/thread-5883-1-1.html

GT-S5830刷机教程

ROM

(推荐) 三星 S5830 2.3.4 ROM (国行ZCKPB) http://dl.dbank.com/c0e5aato8l

2.3.6 ROM S5830DXKT7.tar.zip http://dl.vmall.com/c0016n1hza

工具

Odin Multi Downloader v4.38.exe http://dl.dbank.com/c0ijy8bqrr 记得装USB驱动

教程

[贴自] http://samsungbbs.cnmo.com/thread-10414540-1-1.html

1

按HOME + 电源键进入recovery模式,双wipe

2

电源键+HOME键+音量调节下键 , 两次出现三星log后会进入downloading模式

3

将手机与电脑通过USB数据线相连,然后运行刷机平台Odin Multi Downloader v4.38.exe

1
2
3
4
5
  
  CSC:全称Customer Specific Customization,里面包含的是运营商数据,不同ROM对应的区域不一样,所以CSC文件也不会相同。
  PDA:里面是CODE、ANDROID本身和所有的软件运行依靠的代码。
  PHONE:又称为MODEM,就是基带的意思,是所有通讯模块正常运行的依靠,机带情勿要随便升级替换。
  OPS:其实不是刷到手机中的文件,而是一个奥丁工具用来刷机的配置文件, 里面记录的是手机各个分区的信息。刷机的时候,奥丁依据这个配置将rom内的分区镜像恢复到指定分区中。如果勾选了“重新分区”,则依据这个配置重新分配分区。

4

选择对应的包

1
2
3
4
5
1、点击OPS命令按钮,浏览选择 Cooper_v1.0.ops    
2、点击BOOT命令按钮,浏览选择 APBOOT_S5830****_CL382966_REV03_user_low_true.tar  
3、点击Phone命令按钮,浏览选择 MODEM_S5830****_CL382966_REV03.tar  
4、点击PDA命令按钮,浏览选择 CODE_S5830****_CL382966_REV03_user_low_true.tar  
5、点击CSC命令按钮,浏览选 CSC_GT-S5830S5830O****_CL382966_REV03_user_low_true.tar  

注意:可以只有OPS和PDA,PDA里面也可以只有boot.img。替换别的包刷的话最好保持原来包文件名的部分前缀,不然会提示“invalid image type”


独立包的刷包方式

因为独立包只有一个,看起来还是比较简单的。只用放一个包就好了。
在刷之前确认格式是不是tar格式,名称里面有没有home。

如果有在双击这个ROM,可以进入到压缩包里面,看到这些文件。基本上确认这个包可以刷了。

OPS放好之后,看这里。这3个勾一定打上,

3个勾打上之后,就只有这里面才能放包了,其他都不行


刷好之后是这样