uboot bootargs 文件参数怎么设置

uboot bootargs 文件参数怎么设置,第1张

通过Uboot设置开机启动参数,就可以了,bootargs 等让内核挂载文件系统 e.g: setenv bootargs root=1f01 console=ttySAC0,115200 init=/linuxrc devfs=mount mem=64M 1f01中1f对应十进制的31就是mtd的主设备号,01对应mtd1即把在mtd1上的文件

如何将 iTOP-4418 的串口控制台配置为普通串口。在最终的产品中,如果需要额外的串口,可以将调试用的控制台串口作为普通串口使用,因为交付给最终用户手中的产品,一般不需要调试串口。屏蔽串口控制台需要做内核和文件系统的控制台屏蔽。注意:本文档中的 uboot 配置,也是为了屏蔽 uboot 设置的环境变量传递到内核和 android 系统中,本质上也是为了屏蔽内核和文件系统中的串口控制台。

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/


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

原文地址: http://outofmemory.cn/tougao/11203753.html

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

发表评论

登录后才能评论

评论列表(0条)

保存