I am trying to use the branch linux-linaro-lsk-v3.14-android from Linaro or android-3.14 from AOSP. It seems the adb cannot work with f_fs.c driver.
Every time, you try the commands "mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb", it will failed on no device found. in the function ffs_fs_mount(), it will try to look up a ffs_dev with the name "adb". But the android gadget driver, there is not code to register such device to f_fs. In 3.10 kernel, the ffs_fs_mount() will worked even with a null ffs_dev returned by functionfs_acquire_dev_callback(dev_name), which defined in android.c. Should we have some code in android gadget driver to init a adb ffs_dev as the one in g_ffs driver's gfs_init()? Or any better way to add adb ffs_dev? 3.10 kernel: /* "mount -t functionfs dev_name /dev/function" ends up here */ static struct dentry * ffs_fs_mount(struct file_system_type *t, int flags, const char *dev_name, void *opts) { struct ffs_sb_fill_data data = { .perms = { .mode = S_IFREG | 0600, .uid = GLOBAL_ROOT_UID, .gid = GLOBAL_ROOT_GID, }, .root_mode = S_IFDIR | 0500, }; struct dentry *rv; int ret; void *ffs_dev; struct ffs_data *ffs; ENTER(); ret = ffs_fs_parse_opts(&data, opts); if (unlikely(ret < 0)) return ERR_PTR(ret); ffs = ffs_data_new(); if (unlikely(!ffs)) return ERR_PTR(-ENOMEM); ffs->file_perms = data.perms; ffs->dev_name = kstrdup(dev_name, GFP_KERNEL); if (unlikely(!ffs->dev_name)) { ffs_data_put(ffs); return ERR_PTR(-ENOMEM); } ffs_dev = functionfs_acquire_dev_callback(dev_name); if (IS_ERR(ffs_dev)) { ffs_data_put(ffs); return ERR_CAST(ffs_dev); } ffs->private_data = ffs_dev; data.ffs_data = ffs; rv = mount_nodev(t, flags, &data, ffs_sb_fill); if (IS_ERR(rv) && data.ffs_data) { functionfs_release_dev_callback(data.ffs_data); ffs_data_put(data.ffs_data); } return rv; } 3.14 kernel: static struct dentry * ffs_fs_mount(struct file_system_type *t, int flags, const char *dev_name, void *opts) { struct ffs_sb_fill_data data = { .perms = { .mode = S_IFREG | 0600, .uid = GLOBAL_ROOT_UID, .gid = GLOBAL_ROOT_GID, }, .root_mode = S_IFDIR | 0500, }; struct dentry *rv; int ret; void *ffs_dev; struct ffs_data *ffs; ENTER(); ret = ffs_fs_parse_opts(&data, opts); if (unlikely(ret < 0)) return ERR_PTR(ret); ffs = ffs_data_new(); if (unlikely(!ffs)) return ERR_PTR(-ENOMEM); ffs->file_perms = data.perms; ffs->dev_name = kstrdup(dev_name, GFP_KERNEL); if (unlikely(!ffs->dev_name)) { ffs_data_put(ffs); return ERR_PTR(-ENOMEM); } ffs_dev = ffs_acquire_dev(dev_name); if (IS_ERR(ffs_dev)) { ffs_data_put(ffs); return ERR_CAST(ffs_dev); } ffs->private_data = ffs_dev; data.ffs_data = ffs; rv = mount_nodev(t, flags, &data, ffs_sb_fill); if (IS_ERR(rv) && data.ffs_data) { ffs_release_dev(data.ffs_data); ffs_data_put(data.ffs_data); } return rv; } -- -- unsubscribe: android-kernel+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-kernel --- You received this message because you are subscribed to the Google Groups "Android Linux Kernel Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-kernel+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.