rtc實時時鐘:遵循字元裝置驅動(2)
s3c_rtc_init
platform_driver_register
s3c_rtc_probe
rtc_device_register(「s3c」, &pdev->dev, &s3c_rtcops, this_module)
rtc_dev_prepare
cdev_init(&rtc->char_dev, &rtc_dev_fops);
rtc_dev_add_device
cdev_add
kernel: sys_open
rtc_dev_fops.open
rtc_dev_open
// 根據次裝置號找到以前用"rtc_device_register"註冊的rtc_device
struct rtc_device *rtc = container_of(inode->i_cdev,struct rtc_device, char_dev);
const struct rtc_class_ops *ops = rtc->ops;
err = ops->open ? ops->open(rtc->dev.parent) : 0;
kernel: sys_ioctl
rtc_dev_fops.ioctl
rtc_dev_ioctl
struct rtc_device *rtc = file->private_data;
rtc_read_time(rtc, &tm);
err = rtc->ops->read_time(rtc->dev.parent, tm);
s3c_rtc_gettime
測試rtc:
1、 修改arch\arm\plat-s3c24xx\common-smdk.c
static struct platform_device __initdata *smdk_devs = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
改為(在陣列smdk_devs裡加上s3c_device_rtc):
static struct platform_device __initdata *smdk_devs = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
&s3c_device_rtc,
2、make uimage, 使用新核心啟動
3、 ls /dev/rtc* -l
date /* 顯示系統時間 /
date 060515402019.30 / 設定系統時間 date [mmddhhmm[[cc]yy][.ss]] /
hwclock -w / 把系統時間寫入rtc */
4、斷電,重啟,執行date
linux 驅動程式 高階字元驅動程式
ioctl方法 驅動程式的原型實現 int ioctl struct inode inode,struct file filp,unsigned int cmd,unsigned long arg ioctl 命令選擇 位段結構 number direction ioc read ioc write...
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...
Linux裝置驅動程式 字元裝置驅動程式
1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...