• 内核配置中 ramdisk 大小修改


    1.修改内核配置选项
    进入内核源码目录linux-2.6.32.2目录
    #cp config_mini2440_x35 .config
    #make menuconfig ARCH=arm

    (1).打开配置菜单,修改两个配置项,分别是:
    a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
    b):Device Drivers-->Block devices-->选择 RAM block device support 项

    c):并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。

    d):device driver->block device里的一个选项,‍Default Ramdisk 设置ramdisk的大小.16384

    Note:修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes, 之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此 类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你 做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。

    (2).进入File systems菜单,选上<*> Second extended fs support
    ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
    这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。

    2.修改内核启动参数
    方法有二:
    a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义
    修改为CONFIG_CMDLINE="initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M"
    保存。
    意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x400000。
    此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的

    b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
    同样也是修改该环境变量为bootargs=initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M
    并saveenv保存u-boot环境变量
    以上a),b)的效果是一样的。

    4.编译内核
    #make zImage ARCH=arm CROSS_COMPILE=arm-linux-
    编译完成后在当前目录下就出现了zImage内核映像了。


    5.其实 uImage就是在zImage的开头部分增加了一个64字节的内核映像说明。说明一下:zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文 件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另 外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。


    5.制作uImage内核映像
    由于使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:

    1.把zImage 拷到uboot 的tools 目录下
    2. ./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n "Linux kernel Image" -d zImage uImage-ramdisk

    说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录 之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。

    6.还有一个是启动到最后面,会提示

    RAMDISK: Compressed image found at block 0
    RAMDISK: incomplete write (2270 != 32768)

     之类,这问题就是上面说的内核配置的ramdisk大小不对,要去修改一下内核配置

    我将它修改成12288(1024的整数倍)

  • 相关阅读:
    合并本地多次commit为一个commit
    git 取消文件跟踪
    遍历进程 遍历窗口
    linux查看程序运行参数
    ubuntu下载地址
    将博客搬至CSDN
    extern"C"的使用
    ESP32-NVS存储(非易失性存储库)
    ESP32-EEPROM存储
    c语言简单数据类型
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332976.html
Copyright © 2020-2023  润新知