1 内核配置
在 4418 的 android 源码目录中,使用命令“cd kernel”进入内核源码目
录,使用“export ARCH=arm”命令配置目标平台为 arm,接着使用“make
menuconfig”命令(注意 *** 作这一步,首先要配置好缺省文件),进入内核配置,
使用“make menuconfig”之后
找到“Device Drivers --->”。
进入“Device Drivers --->”,
找到“Character devices --->”。
进入“Character devices --->”,
找到“Serial drivers --->”。
进入“Serial drivers --->”,
找到“Support for console on AMBA serial port”。
将“Support for console on AMBA serial port”选项去掉,
退出 menuconfig,并保存,得到新的“.config”配置文件。
接着使用命令“vim .config”打开缺省文件,搜索关键词“android”,找到
“CONFIG_CMDLINE”配置选项,
删除掉“androidboot.console=ttyAMA0”,
然后保存,内核配置完成。
2 uboot配置
在 4418 的 android 源码目录中,使用命令“cd u-boot”进入 uboot源
码目录,使用命令“vim board/s5p4418/drone2/board.c”打开环境变量配置的文件。
搜索“console=ttyAMA0,115200n8”,去掉“sprintf(bootargs,
"console=ttyAMA0,115200n8 androidboot.hardware=drone2
androidboot.console=ttyAMA0 androidboot.serialno=0123456789abcdef
initrd=0x49000000,0x1000000 init=/init lcdtype=%s", p)”中的
“console=ttyAMA0,115200n8”和“androidboot.console=ttyAMA0”。注意:一共有
三处,需要全部修改。
那u-boot的那些个关于命令的结构体到底从何而来呢?在include/command.h里定义了这样的宏:#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
... ... ... ...
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
第
二个宏展开便定义了一个代表u-boot命令的结构体。也就是说定义了一个变量,并赋与其初值。关键在于Struc_Section,它被展开后成了
__attribute__
((unused,section(".u_boot_cmd")))。也就是说,每个变量(占内存!)都放在.u_boot_cmd段里。它们还被加上
了unused的属性,应该是为了平息编译器的警告。确实,没有任何代码引用过它们!!如果这些变量被放在一个显示声明的数组里,那么,每增加一个命令都
得去更改数组的定义。然后,通过这种方法,各人想要增加新的命令时,只需用上面的这个宏即可。这些表示命令的结构体被统一放在.u_boot_cmd段
里,链接脚本里又有:
__u_boot_cmd_start = .
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .
即,
把所有待链接文件里u_boot_cmd段合并在一起生成一个大的.u_boot_cmd段,并且用__u_boot_cmd_start与
__u_boot_cmd_end两个符号标识这块内存的首尾边界。这样,不用大家去修改某一文件的代码(为了改变数组的定义),而是像数据库一样,各个
提供自己的信息。借由编译器与链接器生成这个“数据库”, *** 作数据时对“数据库”进行查询即可。正是一个月前看《计算机程序构造与解释》时看到的
“Data Direct”(好像是这么说)。在Grub及内核里也用了这样机制。
参考:http://blog.163.com/lijiji_1515/blog/static/12687744620114522449739/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)