文章目录

  • 前言
  • 硬盘的分区
  • 内核的修改
  • 调试过程中遇到的其它问题
    • 默认挂载失败
    • 驱动加载失败
    • 其它报错

前言

因产品需要,硬盘容量从1T提升到4T,当前的磁盘的分区表为mgr,文件系统为ext3

这两个选项均不支持2T以上硬盘,所以要对内核进行一些修改和调试,本文档记录调试过程中碰到的问题和解决办法

硬盘的分区

首先得将硬盘分区为GPT,由于arm linux上的工具比较简陋,因此暂时选择在ubuntu上做分区工作

ubuntu接上硬盘后,用fdisk查看,可以得到基本的信息,比如容量2000GB

sudo fdisk -lDisk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
  1. 设置分区表为GPT

    /* # 表示root用户权限模式下,用命令行终端执行, 后文不再解释 */
    //sda这个参数与fdisk -l显示的硬盘节点对应,有可能是sdb或sdc,不要搞错了把自己硬盘格了
    //parted会进入自己程序的命令行界面,输入q或quit可以退出
    # parted /dev/sda
    mklabel gpt
    
  2. 创建分区

      //全部空间都给primary分区
    mkpart primary 0 -1
    
  3. 格式化分区

    //先退出parted
    quit
    //创建分区后,查看/dev/sda,可以发现多了一个/dev/sda1
    # mkfs.ext4 -F /dev/sda1
    
  4. 挂载到pc上

    //格式化完成后,可以尝试挂载到pc上,看能不能成功,注意挂载的目的路径一定要存在
    # mkdir /mnt/test
    # mount /dev/sda1 /mnt/test
    
  5. 挂载成功后,应该能用 df -h 查看了

内核的修改

以下内容都需要选中

Enable the block layer  --->[*]   Support for large (2TB+) block devices and filesFile systems  ---> <*> The Extended 4 (ext4) filesystem[*]   Ext4 extended attributes[*]     Ext4 POSIX Access Control Lists[*]     Ext4 Security LabelsPartition Types  --->[*]   EFI GUID Partition support

编译完内核后,重新烧录即可,在arm-linux中,也可以执行之前的挂载命令,应该是能成功挂载的

调试过程中遇到的其它问题

默认挂载失败

产品之前是用的1T硬盘,开机就会按照脚本,自动进行挂载,现在换了GPT格式的硬盘,默认挂载不起作用,反而报错了,其实这个问题很好解决,修改一下 /etc/fstab 文件即可

通过查看该文件,可以看到这么一句话

/dev/sda      /zigsun       ext3      defaults       0  0

很明显这个挂载肯定会失败,改为如下即可

/dev/sda1      /zigsun       ext4      defaults       0  0

驱动加载失败

报错如下:

syslink: disagrees about version of symbol module_layout
osa_kermod: disagrees about version of symbol module_layout

由于内核重新编译过,这里是说版本上和驱动模块的ko文件冲突,那可能就是有冲突吧,这个解决起来稍微麻烦一点

解决这个有两种办法,一是ko重新编,二是内核重新编

我们知道海思的很多ko是不开源的,所以我们只能改内核,我这个芯片虽然不是海思,但是重新编的ko加载后发现报了更多的错,而且网上还查不到

*** DM8168VPSSM3PROC_map: AddrTable_SIZE reached!
Error [0x86a85003] at Line no: 1778 in file /zigsun/8003/DVRRDK_04.00.00.03/ti_tools/syslink/syslink_2_21_03_11/packages/ti/syslink/utils/hlos/knl/Linux/../../../../../../ti/syslink/family/common/ti81xx/ti81xxducati/ti81xxvpssm3/Dm8168M3DssProc.c

所以改内核就完事了

首先取消内核的版本检测

[*] Enable loadable module support  --->[ ]   Module versioning support   # 这一项要关闭

改完后,加载还是报错

syslink: version magic '2.6.37-2.0.0 mod_unload modversions ARMv7 p2v8 ' should be '2.6.37-2.0.0 mod_unload ARMv7 p2v8 '

虽然内核不检查了,但是ko还在对比这个版本,这两个version magic明显不一致,前面的多一个modversions,首先要搞清楚,哪边是内核的version magic,哪边是驱动的version magic

先看一下ko的信息

cd opt/dvr_rdk/ti816x/kermod/
modinfo syslink.ko

得到

vermagic:       2.6.37-2.0.0 mod_unload modversions ARMv7 p2v8

这么说内核应该是因为刚才的修改,少了modversions,因此想办法加上去就好了

# vi include/linux/vermagic.h

改这个文件,不管条件成不成立,都加modversions上去

#if CONFIG_MODVERSIONS
#define MODULE_VERMAGIC_MODVERSIONS "modversions "
#else
#define MODULE_VERMAGIC_MODVERSIONS "modversions "                           #endif

重新编译内核,重新烧录,发现已经能正常加载驱动模块了

其它报错

modprobe: FATAL: Could not load /lib/modules/2.6.37-2.0.0/modules.dep: No such file or directory

如果去找的话,发现本地根本没有 2.6.37-2.0.0 这个目录,也没有modules.dep文件

因此去创建一个这样的目录,再创建一个这样的文件,并给它读写权限,就不会报错了

编译TI8168的这个DVRRDK时,还可能遇到一些报错

分析build_lsp.mk可得知,编译lsp时会将ti8168_etv_defconfig作为默认配置进行编译,因此之前要将修改过的config文件覆盖默认的

cd /zigsun/8003/DVRRDK_04.00.00.03/ti_tools/linux-dvr-rdk
cp .config arch/arm/configs/ti8168_etv_defconfigcd /zigsun/8003/DVRRDK_04.00.00.03/dvr_rdk
./run_make.sh  ti816x-etv-hdmi sys

sys的依赖如下:

 sys:  uboot linux_deps syslink dvr_rdk

uboot就不用说了,linux_deps主要是编译内核,已经驱动模块,syslink也是编译一些ko,dvr_rdk是编译固件,其中编译lsp的modules时,仍然有报错

make[6]: *** 没有规则可以创建“/zigsun/8003/DVRRDK_04.00.00.03/ti_tools/linux-dvr-rdk/usr/include/linux/netfilter/.install”需要的目标“/zigsun/8003/DVRRDK_04.00.00.03/ti_tools/linux-dvr-rdk/include/linux/netfilter/xt_connmark.h”。 停止make[6]: *** 没有规则可以创建“/zigsun/8003/DVRRDK_04.00.00.03/ti_tools/linux-dvr-rdk/usr/include/linux/netfilter/.install”需要的目标“/zigsun/8003/DVRRDK_04.00.00.03/ti_tools/linux-dvr-rdk/include/linux/netfilter/xt_dscp.h”。 停止。

经过排查,这些文件都有,但是都是大写的,全部复制一份改为小写就好了

例如,复制一份xt_CONNMARK.h改为小写的xt_connmark.h

有时候也会因为大写的没有而报错,这时就把小写的复制一份,名字改为大写的就好

如何在arm-linux下支持2T硬盘相关推荐

  1. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  2. linux下大于2TB硬盘parted 分区

    linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法,linux GPT分区表 管理 自动挂载分区 2012-03-12 16:59:11|  分类: LINUX|举报|字号 订阅 ...

  3. 升级 ServeRADI-8i控制器,使用IBM 3650 9797 老服务器支持2T 硬盘

    IBM 3650 9797服务器默认情况不支持2T硬盘,可以通过升级固件版本来解决. 升级第一步:如果物理硬盘有数据,应先备份硬盘上的数据: 下载控制器升级程序:http://www-947.ibm. ...

  4. ARM Linux下UPnP使用

    ARM Linux下UPnP使用   一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术, ...

  5. linux pfn,ARM Linux下的page和pfn之间转换的宏。

    ARM Linux下的page和pfn之间转换的宏如下: 1)page_to_pfn 2)pfn_to_page 这两个宏依赖于内核编译时,选择的内存模型.在include/asm-generic/m ...

  6. linux挂载固硬盘装,linux下安装新硬盘并挂载mount

    linux下安装新硬盘并加载使用手记 ================================================================================ ...

  7. linux-arm下如何开启tftp传输,arm linux 下移植busybox 的tftp

    (1)进入busybox目录,make menuconfig ,然后在networking中勾选tftp项跟tftpd项. (2)配置/etc/inetd.conf 中关于tftp的选项(此部未验证, ...

  8. bios设置识别linux硬盘,linux下如何查看硬盘插在主板那个SATA接口上?梅捷主板SY-A77M3+ bios设置 咋设置啊...

    在上一篇文章中,小编为您详细介绍了关于<联想的主板是哪的?修改技嘉主板bios安装联想win7 64位>相关知识.本篇中小编将再为您讲解标题linux下如何查看硬盘插在主板那个SATA接口 ...

  9. linux下无法访问硬盘

    当出现在linux下无法访问硬盘并报如下错误时可以采取如下操作 Error mounting /dev/sda6 at /media/qiaokaiming/20F47472F4744BD2: Com ...

  10. 无损播放器Linux系统,乐迷有福了:可能是linux下支持中英文cue播放无损音乐最好的音乐播放器:qmmp 0.4.0(非火星帖)...

    你的位置: 问答吧 -> Linux 软件 -> 问题详情 乐迷有福了:可能是linux下支持中英文cue播放无损音乐最好的音乐播放器:qmmp 0.4.0(非火星帖) 提示:Search ...

最新文章

  1. c++11 多线程 1c++ concurrency in action
  2. DLL version issue and SQL Parameters Issue
  3. CoreOS的Tectonic新发行版支持Kubernetes自我管理
  4. android相机保存文件为空,相机不保存到指定的文件位置android
  5. Python3逻辑运算符
  6. 【UI】android如何绘制一个饼图
  7. 贝叶斯定理、显著性检验、p值关系、分类
  8. gradle是否可以编译c语言,build.gradle按条件编译与cmake配置
  9. php如何编造简历,在简历里编造内容需要注意哪些问题?
  10. Android Learning:数据存储方案归纳与总结
  11. oracle 双层循环,oracle的双重for循环
  12. java版b2b2c社交电商spring cloud分布式微服务(八)springboot整合mongodb
  13. JavaScript常用DOM操作方法和函数
  14. Gradle 命令之 --stacktrace , --info , --debug 用法
  15. Asp.net页面生命周期详解任我行(2)-WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用...
  16. 企业全面运营管理沙盘模拟心得_企业沙盘模拟心得感受
  17. 网易互娱面试总结(上)
  18. GaRy-Liang的linux成长日记12-算术预算与测试
  19. 【教程】用微信创建生日提醒
  20. java源码转换e4a_E4A核心代码生成类库工具

热门文章

  1. 实现memcmp函数
  2. Unity NavMesh寻路 A*(A star)分析及实例应用(一)
  3. 感谢爱测未来,零基础的我的实习期是这么过来的
  4. android自动亮度流程,Android 亮度自动调节是如何实现的?
  5. Python中sys模块使用
  6. Docker 目录/var/lib/docker/containers文件过大
  7. 制造业生产过程中多源异构数据处理方法综述
  8. cve 爬虫_爬虫技术实践(九)国家信息安全漏洞库基于月份的漏洞收集实战
  9. the little schemer 笔记(8)
  10. 用Python做一个久坐提醒小助手