bsp-SSD开发
创始人
2025-05-29 00:28:26

BSP外设开发

一、SSD开发

文章目录

  • BSP外设开发
  • 一、SSD硬件连接
  • 二、内核配置
  • 三、磁盘相关操作
    • 1.磁盘分区
    • 2.格式化
    • 3.挂载
  • 四、获取SSD容量大小
  • 五、自定义SSD节点名称
文章目录)


一、SSD硬件连接

G5 通过USB2.0接口连接USB HUB,SSD通过JMS578将SATA接口转成USB接口连接在USB HUB上。

二、内核配置

make menuconfig 需要打开:

[m]SCSI device support
[m]SCSI disk support
[m]SUB Mass Storage support  //将SSD识别为存储设备

为了加快kernel启动速度,驱动抽出,需要手动加载测试:

insmod /dav/scsi_mod.ko
insmod /dav/sd_mod.ko
insmod /dav/usb_storage.ko
insmod /dav/ehci-hcd.ko

加载驱动后,自动在/dev下生成sdx节点

[13613.334429] scsi host0: usb-storage 1-1.2:1.0
Jan 29 09:41:39 bsp.info kernel: [13613.315134] usb-storage 1-1.2:1.0: USB Mass Storage device detected
Jan 29 09:41:39 bsp.info kernel: [13613.326546] usb-storage 1-1.2:1.0: Quirks match for vid 152d pid 0578: 1000000
Jan 29 09:41:39 bsp.info kernel: [13613.334429] scsi host0: usb-storage 1-1.2:1.0
[13614.407964] scsi 0:0:0:0: Direct-Access     JMicron  Generic          0203 PQ: 0 ANSI: 6
[13614.419394] sd 0:0:0:0: [sda] 2000409216 512-byte logical blocks: (1.02 TB/954 GiB)
[13614.437655] sd 0:0:0:0: [sda] Write Protect is off
[13614.442524] sd 0:0:0:0: [sda] Mode Sense: 47 00 00 08
[13614.456892] sd 0:0:0:0: [sda] Disabling FUA
[13614.461078] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[13614.991051] sd 0:0:0:0: [sda] Attached SCSI disk
Jan 29 09:41:40 bsp.notice kernel: [13614.407964] scsi 0:0:0:0: Direct-Access     JMicron  Generic          0203 PQ: 0 ANSI: 6
Jan 29 09:41:40 bsp.notice kernel: [13614.419394] sd 0:0:0:0: [sda] 2000409216 512-byte logical blocks: (1.02 TB/954 GiB)
Jan 29 09:41:40 bsp.notice kernel: [13614.437655] sd 0:0:0:0: [sda] Write Protect is off
Jan 29 09:41:40 bsp.debug kernel: [13614.442524] sd 0:0:0:0: [sda] Mode Sense: 47 00 00 08
Jan 29 09:41:40 bsp.notice kernel: [13614.456892] sd 0:0:0:0: [sda] Disabling FUA
Jan 29 09:41:40 bsp.notice kernel: [13614.461078] sd 0:0:0:0: [sda] Write cache: enabled, re

三、磁盘相关操作

1.磁盘分区

分区前要找到新的磁盘名称。使用lsblk

# fdisk -l
Disk /dev/sda: 954 GB, 1024209518592 bytes, 2000409216 sectors
124519 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 16065 * 512 = 8225280 bytesDisk /dev/sda doesn't contain a valid partition table

给磁盘进行分区。fdisk /dev/sda

# fdisk /dev/sda
Device contains neither a valid DOS partition table, nor Sun, SGI, OSF or GPT disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that the previous content
won't be recoverable.The number of cylinders for this disk is set to 124519.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs(e.g., DOS FDISK, OS/2 FDISK)//设置第一个磁盘分区
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-124519, default 1): Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-124519, default 124519): +20G//查看磁盘分区
Command (m for help): p
Disk /dev/sda: 954 GB, 1024209518592 bytes, 2000409216 sectors
124519 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 16065 * 512 = 8225280 bytesDevice  Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/sda1    0,1,1       1023,254,63         63   39086144   39086082 18.6G 83 Linux//设置第二个磁盘分区
Command (m for help): n
Command actione   extendedp   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (2434-124519, default 2434): Using default value 2434
Last cylinder or +size or +sizeM or +sizeK (2434-124519, default 124519): Using default value 124519//查看磁盘分区
Command (m for help): p
Disk /dev/sda: 954 GB, 1024209518592 bytes, 2000409216 sectors
124519 cylinders, 255 heads, 63 sectors/track
Units: cylinders of 16065 * 512 = 8225280 bytesDevice  Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/sda1    0,1,1       1023,254,63         63   39086144   39086082 18.6G 83 Linux
/dev/sda2    1023,254,63 1023,254,63   39086145 2000397734 1961311590  935G 83 Linux//保存,否则之前的配置失效
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table
[14611.573441]  sda: sda1 sda2
# Jan 29 09:58:17 bsp.info kernel: [14611.573441]  sda: sda1 sda2

此时ls /dev, 可以查看到有sda,sda1,sda2 三个节点生成

2.格式化

格式化是为了写入文件系统,格式化非常简单,使用mkfs.ext4 文件系统名 即可。

# mkfs.ext4 /dev/sda1
mke2fs 1.44.5 (15-Dec-2018)
/dev/sda1 contains a ext4 file systemlast mounted on Thu Jan 29 05:16:48 1970
Proceed anyway? (y,N) y
ext2fs_check_if_mount: Can't check if filesystem is mounted due to missing mtab file while determining whether /dev/sda1 is mounted.
Creating filesystem with 4885760 4k blocks and 1221600 inodes
Filesystem UUID: 813be36a-7dbb-47d5-952b-21bb290fa1d2
Superblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

3.挂载

格式化后文件系统已经写入到新的分区了,但是该分区还不能使用,还需要去将分区挂载到空目录上。

# mkdir test_ssd_sda1
# mount /dev/sda1 /test_ssd_sda1
[15128.747496] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
# Jan 29 10:06:55 bsp.info kernel: [15128.747496] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)

到这里就可以实现新的分区了,使用df -h检测。

# df -h
Filesystem                Size      Used Available Use% Mounted on
udev                    104.4M    260.0K    104.2M   0% /dev
/dev/part/app0blk       239.9M    140.1M     83.0M  63% /dav
/dev/part/cfg0blk        14.5M      4.2M      9.2M  32% /davinci
/dev/part/cfg1blk        14.5M      4.2M      9.2M  31% /config
/dev/part/model         487.9M      1.4M    450.7M   0% /model
10.1.74.244:/data1/wujiahui11/nfs3.9T      3.4T    324.7G  92% /tmp
/dev/sda1                18.2G     44.0M     17.2G   0% /test_ssd_sda1

四、获取SSD容量大小

为了提供给应用层获取SSD容量的接口,仿造df.c 写一个测试代码,后期提供给应用同事。

#include 
#include int main()
{struct statfs diskInfo;statfs("/test_1", &diskInfo);unsigned long long totalBlocks = diskInfo.f_bsize;unsigned long long totalSize = totalBlocks * diskInfo.f_blocks;size_t mbTotalsize = totalSize>>20;unsigned long long freeDisk = diskInfo.f_bfree*totalBlocks;size_t mbFreedisk = freeDisk>>20;printf ("/test_1  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);statfs("/test_2", &diskInfo);totalBlocks = diskInfo.f_bsize;totalSize = totalBlocks * diskInfo.f_blocks;mbTotalsize = totalSize>>20;freeDisk = diskInfo.f_bfree*totalBlocks;mbFreedisk = freeDisk>>20;printf ("/test_2  total=%dMB, free=%dMB\n", mbTotalsize, mbFreedisk);return 0;
}

五、自定义SSD节点名称

需求:
第一个设备第二个分区/dev/ssd02
第二个设备第二个分区/dev/ssd12
在rules文件中新增规则:
具体udev规则,自行查阅资料

ATTRS{idVendor}==“152d”,ATTRS{idProduct}==“0578”,KERNEL==“sd*”,NAME=“ssd0%n”

相关内容

热门资讯

今年我省粮食产量达515.56... (来源:辽宁日报)转自:辽宁日报 图为在中储粮(盘锦)储运有限公司,装运粮食的重型卡车排起长队...
国家发展改革委部署促进投资止跌... (来源:辽宁日报)转自:辽宁日报 新华社北京12月13日电 (记者魏玉坤) 记者13日从全国发展和改...
江苏省实施《中华人民共和国森林... (来源:新华日报) 目 录 第一章 总则 第二章 森林、林木和林地权属管理...
姜堰数字化产品讲“活”理论 (来源:新华日报) □ 本报记者 卢佳乐 通讯员 姜宣 “王教授,您约我‘喝茶论道’,...
联合国维和部队在苏丹遇袭 6人... 转自:财联社【联合国维和部队在苏丹遇袭 6人死亡】财联社12月14日电,当地时间13日,苏丹武装部队...