On Raspberry pi, I can read the serial number of SD card mounted on the built-in SD card drive from cid file under /sys/block/mmcblk0/device folder.
pi@raspberrypi:~ $ ls /sys/block/mmcblk0/device
block driver hwrev oemid scr type
cid dsr manfid power serial uevent
csd erase_size name preferred_erase_size ssr
date fwrev ocr rca subsystem
But, about the SD card connected with USB SD card reader/writer mounted on the device of sda, I can't see the cid file.
pi@raspberrypi:~ $ ls /sys/block/sda/device
blacklist evt_soft_threshold_reached rescan
block generic rev
bsg inquiry scsi_device
delete iocounterbits scsi_disk
device_blocked iodone_cnt scsi_generic
device_busy ioerr_cnt scsi_level
driver iorequest_cnt state
eh_timeout max_sectors subsystem
evt_capacity_change_reported modalias timeout
evt_inquiry_change_reported model type
evt_lun_change_reported power uevent
evt_media_change queue_depth vendor
evt_mode_parameter_change_reported queue_type wwid
Is there any way to read SD card serial number mounted as sda? Any suggestions are welcome!
I ran into this problem just the other day (and stumbled across this question in my search), and it looks like the answer is that it's not really possible.
The CID information is stored on a register on the SD card, and you can only access it through SPI (usually). The driver has to send specific commands to the SD card to read these registers.
When you use a USB SD Card reader on the other hand, it uses the generic "USB mass storage device" interface -- so when your PC is talking to the USB card reader, it [your PC] doesn't even really know it's talking to an SD card specifically, it just treats it like its another generic USB storage device (like a flash drive or something).
The only way this kind of thing would remotely be possible if your USB SD card reader had a mode that let you communicate with it directly by-hand (e.g. send a custom command to it over USB), but AFAIK this kind of thing doesn't exist.
If you're deadset on getting the CID info and don't mind using additional hardware (~ $10), you could buy an SD card breakout board and connect it to an Arduino or whatever, then you'll have access to the pins and you can write your own code to read the CID data.
Credits to this answer, which is what my answer is based off: https://stackoverflow.com/a/50999034/1576548
If you're interested, you can check out the SD Card Association's specification (the 'Physical Layer') here https://www.sdcard.org/downloads/pls/ for more info on how the CID information is gathered.
And the Linux kernel's SD card driver: https://github.com/torvalds/linux/blob/master/drivers/mmc/core/sd.c