如何在arm-linux下支持2T硬盘
文章目录
- 前言
- 硬盘的分区
- 内核的修改
- 调试过程中遇到的其它问题
- 默认挂载失败
- 驱动加载失败
- 其它报错
前言
因产品需要,硬盘容量从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
设置分区表为GPT
/* # 表示root用户权限模式下,用命令行终端执行, 后文不再解释 */ //sda这个参数与fdisk -l显示的硬盘节点对应,有可能是sdb或sdc,不要搞错了把自己硬盘格了 //parted会进入自己程序的命令行界面,输入q或quit可以退出 # parted /dev/sda mklabel gpt
创建分区
//全部空间都给primary分区 mkpart primary 0 -1
格式化分区
//先退出parted quit //创建分区后,查看/dev/sda,可以发现多了一个/dev/sda1 # mkfs.ext4 -F /dev/sda1
挂载到pc上
//格式化完成后,可以尝试挂载到pc上,看能不能成功,注意挂载的目的路径一定要存在 # mkdir /mnt/test # mount /dev/sda1 /mnt/test
挂载成功后,应该能用
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硬盘相关推荐
- linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...
linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...
- linux下大于2TB硬盘parted 分区
linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法,linux GPT分区表 管理 自动挂载分区 2012-03-12 16:59:11| 分类: LINUX|举报|字号 订阅 ...
- 升级 ServeRADI-8i控制器,使用IBM 3650 9797 老服务器支持2T 硬盘
IBM 3650 9797服务器默认情况不支持2T硬盘,可以通过升级固件版本来解决. 升级第一步:如果物理硬盘有数据,应先备份硬盘上的数据: 下载控制器升级程序:http://www-947.ibm. ...
- ARM Linux下UPnP使用
ARM Linux下UPnP使用 一.UPnP简介 UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术, ...
- linux pfn,ARM Linux下的page和pfn之间转换的宏。
ARM Linux下的page和pfn之间转换的宏如下: 1)page_to_pfn 2)pfn_to_page 这两个宏依赖于内核编译时,选择的内存模型.在include/asm-generic/m ...
- linux挂载固硬盘装,linux下安装新硬盘并挂载mount
linux下安装新硬盘并加载使用手记 ================================================================================ ...
- linux-arm下如何开启tftp传输,arm linux 下移植busybox 的tftp
(1)进入busybox目录,make menuconfig ,然后在networking中勾选tftp项跟tftpd项. (2)配置/etc/inetd.conf 中关于tftp的选项(此部未验证, ...
- bios设置识别linux硬盘,linux下如何查看硬盘插在主板那个SATA接口上?梅捷主板SY-A77M3+ bios设置 咋设置啊...
在上一篇文章中,小编为您详细介绍了关于<联想的主板是哪的?修改技嘉主板bios安装联想win7 64位>相关知识.本篇中小编将再为您讲解标题linux下如何查看硬盘插在主板那个SATA接口 ...
- linux下无法访问硬盘
当出现在linux下无法访问硬盘并报如下错误时可以采取如下操作 Error mounting /dev/sda6 at /media/qiaokaiming/20F47472F4744BD2: Com ...
- 无损播放器Linux系统,乐迷有福了:可能是linux下支持中英文cue播放无损音乐最好的音乐播放器:qmmp 0.4.0(非火星帖)...
你的位置: 问答吧 -> Linux 软件 -> 问题详情 乐迷有福了:可能是linux下支持中英文cue播放无损音乐最好的音乐播放器:qmmp 0.4.0(非火星帖) 提示:Search ...
最新文章
- c++11 多线程 1c++ concurrency in action
- DLL version issue and SQL Parameters Issue
- CoreOS的Tectonic新发行版支持Kubernetes自我管理
- android相机保存文件为空,相机不保存到指定的文件位置android
- Python3逻辑运算符
- 【UI】android如何绘制一个饼图
- 贝叶斯定理、显著性检验、p值关系、分类
- gradle是否可以编译c语言,build.gradle按条件编译与cmake配置
- php如何编造简历,在简历里编造内容需要注意哪些问题?
- Android Learning:数据存储方案归纳与总结
- oracle 双层循环,oracle的双重for循环
- java版b2b2c社交电商spring cloud分布式微服务(八)springboot整合mongodb
- JavaScript常用DOM操作方法和函数
- Gradle 命令之 --stacktrace , --info , --debug 用法
- Asp.net页面生命周期详解任我行(2)-WebForm页面生命周期WEBFORM_ASPNET控件树的生成和作用...
- 企业全面运营管理沙盘模拟心得_企业沙盘模拟心得感受
- 网易互娱面试总结(上)
- GaRy-Liang的linux成长日记12-算术预算与测试
- 【教程】用微信创建生日提醒
- java源码转换e4a_E4A核心代码生成类库工具
热门文章
- 实现memcmp函数
- Unity NavMesh寻路 A*(A star)分析及实例应用(一)
- 感谢爱测未来,零基础的我的实习期是这么过来的
- android自动亮度流程,Android 亮度自动调节是如何实现的?
- Python中sys模块使用
- Docker 目录/var/lib/docker/containers文件过大
- 制造业生产过程中多源异构数据处理方法综述
- cve 爬虫_爬虫技术实践(九)国家信息安全漏洞库基于月份的漏洞收集实战
- the little schemer 笔记(8)
- 用Python做一个久坐提醒小助手