나는 Linux Device Drivers, 3rd edition의 3.5 장을 연구 중이다. 장치가 열려있는 동안 장치를 나타내는 struct inode *inode
이 scull_open
에 전달, 내 이해에서리눅스 장치 드라이버 프로그래밍에서 struct inode와 struct 파일을 사용하여 데이터를 전달하는 이유
int scull_open(struct inode *inode, struct file *filp)
{
struct scull_dev *dev;
dev = container_of(inode->i_cdev, struct scull_dev, cdev);
filp->private_data = dev; /* for other methods */
}
return 0;
}
:이 부분은 우리가 open 함수에 struct inode *inode
에서 자신을 정의 된 사용자 정의 구조를 검색하는 방법을 소개합니다. 그런 다음, 사용자 정의 구조 dev
이 filp->private_data
로 추출 전달 그래서 같은 scull_read
등의 다른 방법을 사용할 수 있습니다 : 우리는 이미 scull_setup_cdev
here에 초기화하는 동안 struct scull_dev *dev
있다고 실현 될 때까지
ssize_t scull_read(struct file *filp, char _ _user *buf, size_t count,
loff_t *f_pos)
{
struct scull_dev *dev = filp->private_data;
/* other codes that uses *dev */
}
이 나에게 좋은 것 같다.
나는 우리가, 전역 변수 다음 scull_read
을 struct scull_dev *dev
을 할 수 있으며, 다른 방법은 결국 inode
및 file
를 사용하여 모든 통과를 거치지 않고 그것에 액세스 할 수 있습니다 생각 때문에 오히려 혼란 스러워요.
제 질문은 전역 변수로 바꾸는 것이 가장 좋습니다.
누구든지이 메서드를 사용하여 데이터를 전달할 수있는 몇 가지 실용적인 예를 제공 할 수 있습니까?
전체 구현을 볼 수 있습니다. –
그래,하지만 작가를 가르치는 동안 왜 특정 기능의 사용이 무엇인지 말해야 만한다. – mrigendra