企业需要一个移动网站还是应用程序?_励志网

企业需要一个移动网站还是应用程序?

2018-09-19 07:21 来源:励志网

/*设置tpm_chip结构体is_open字段值为0*/

mutex_lock(&chip->buffer_mutex);

del_singleshot_timer_sync(&chip->user_read_timer);

/*向TPM设备中发送数据,此函数通过TPM设备驱动程序库TDDL(TPMDeviceDriverLibrary)调用*/

ssize_ttpm_write(structfile*file,constchar__user*buf,

chip->data_buffer=kzalloc(TPM_BUFSIZE,GFP_KERNEL);

(chip->data_buffer,(void__user*)buf,in_size)){

size_tsize,loff_t*off)

structtpm_chip*chip=file->private_data;

kfree(chip->data_buffer);

/*释放读写缓存区*/

/*原子设置,使读写缓存区的互斥锁为0*/

ssize_torig_ret_size=ret_size;

structtpm_chip*chip=file->private_data;

/*用0初始化data_buffer中的数据*/

ret_size=atomic_read(&chip->data_pending);

while(atomic_read(&chip->data_pending)!=0)

intminor=iminor(inode);

mutex_unlock(&chip->buffer_mutex);

/*设备文件系统调用tpm_open()打开TPM设备实例*/

ssize_ttpm_read(structfile*file,char__user*buf,

if(test_and_set_bit(0,&chip->is_open)){

atomic_set(&chip->data_pending,0);

atomic_set(&chip->data_pending,out_size);

put_device(chip->dev);

mod_timer(&chip->user_read_timer,jiffies+(60*HZ));

flush_work_sync(&chip->work);

/*设置TPM设备打开次数为0,tpm_chip结构体中的is_open字段表示TPM设备打开的次数*/

size_tin_size=size,out_size;

del_singleshot_timer_sync(&chip->user_read_timer);

/*设定读的定时,读操作需在此时间内读取命令执行结果*/

/*将执行结果data_buffer中的值返回到用户空间的buf中*/

/*设置文件结构的私有数据成员值为NULL*/

file->private_data=chip;

get_device(chip->dev);

mutex_lock(&chip->buffer_mutex);

size_tsize,loff_t*off)

inttpm_release(structinode*inode,structfile*file)

clear_bit(0,&chip->is_open);

/*将TPM命令从用户空间拷贝到设备驱动程序数据的缓存区中,即chip->data_buffer中*/

if(chip->data_buffer==NULL){

list_for_each_entry_rcu(pos,&tpm_chip_list,list){

file->private_data=NULL;

flush_work_sync(&chip->work);

/*检测chip结构体中is_open字段的值,确定此TPM设备只能打开一次*/

/*设备文件系统调用tpm_release()释放tpm设备实例*/

/*将设备引用计算器的值减1*/

/*分配TPM驱动程序的数据缓存区空间*/

msleep(TPM_TIMEOUT);

dev_dbg(chip->dev,"AnotherprocessownsthisTPMn");

/*从驱动程序数据缓存区读取命令执行的结果返回给用户,此函数也是由TPM设备驱动程序库TDDL调用*/

clear_bit(0,&chip->is_open);

rc=copy_to_user(buf,chip->data_buffer,ret_size);

/*有读操作时,让写操作睡眠*/

structtpm_chip*chip=NULL,*pos;

if(in_size>TPM_BUFSIZE)

/*原子操作,读取data_pending字段大小*/

if(pos->vendor.miscdev.minor==minor){

atomic_set(&chip->data_pending,0);

out_size=tpm_transmit(chip,chip->data_buffer,TPM_BUFSIZE);

inttpm_open(structinode*inode,structfile*file)

put_device(chip->dev);

structtpm_chip*chip=file->private_data;

put_device(chip->dev);

/*原子操作,设子data_pending字段中的值为0*/

/*当有TPM设备执行读操作时,不能有写操作*/

in_size=TPM_BUFSIZE;

/将TPM设备实例放在文件结构的私有数据成员上*/

atomic_set(&chip->data_pending,0);

#p#分页标题#e#/*发送命令给对应的TPM设备执行,等待TPM设备执行完成,返回执行结果,发送命令和返回结果都是原子操作*/

mutex_unlock(&chip->buffer_mutex);

责编: