插入mymodule后,我没有看到/ sys / module / mymodule / parameters文件夹被创建

时间:2015-11-20 04:49:09

标签: c linux-kernel

我创建了一个名为 /** * Set Camera parameters for Best image quality available * * @param mCamera Camera object */ public void setCameraParameters(Camera mCamera) { Camera.Parameters mCameraParams; // Set Camera Parameters for best image quality available if (mCamera != null) { mCamera.stopPreview(); mCameraParams = mCamera.getParameters(); Camera.Size bestSizeAvailable = null; List<Camera.Size> listPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes(); bestSizeAvailable = listPreviewSizes.get(0); for (int i = 1; i < listPreviewSizes.size(); i++) { if ((listPreviewSizes.get(i).width * listPreviewSizes.get(i).height) > (bestSizeAvailable.width * bestSizeAvailable.height)) { bestSizeAvailable = listPreviewSizes.get(i); } } List<Integer> listSupportedPreviewFormats = mCameraParams.getSupportedPreviewFormats(); Iterator<Integer> iteratorSupportedPreviewFormats = listSupportedPreviewFormats.iterator(); while (iteratorSupportedPreviewFormats.hasNext()) { Integer previewFormat = iteratorSupportedPreviewFormats.next(); if (previewFormat == ImageFormat.YV12) { mCameraParams.setPreviewFormat(previewFormat); } } mCameraParams.setPreviewSize(bestSizeAvailable.width, bestSizeAvailable.height); mCameraParams.setPictureSize(bestSizeAvailable.width, bestSizeAvailable.height); mCamera.setParameters(mCameraParams); mCamera.startPreview(); } } 的简单内核模块。插入后:

mymodule.c

它被加载并在日志中打印正确的值。我还可以看到创建文件夹insmod mymodule.ko param_int=0x100 。但我没有在/sys/module/mymodule/

中看到创建参数文件夹

我做错了什么?

/sys/module/mymodule/

2 个答案:

答案 0 :(得分:2)

这是你的问题:

module_param(param_int, int, 0);

module_param宏的最后一个参数是sysfs中变量的权限。由于您在那里指定了零,因此不会导出参数。

将此更改为:

module_param(param_int, int, S_IRUGO | S_IWUSR);

你应该按预期显示它。

答案 1 :(得分:0)

必须在模块代码中明确创建sys /中的条目:

static DEVICE_ATTR(<name>, 0644, show_data, store_data);
static ssize_t store_data (struct device *dev, \
                       struct device_attribute *attr, \
                       const char *buf, size_t len)
{
        struct platform_device *pdev = to_platform_device(dev);
        unsigned int value = simple_strtoul (buf, NULL, 10);
        /* ... */
        return strnlen(buf, PAGE_SIZE);
}

static ssize_t show_data (struct device *dev, \
                      struct device_attribute *attr, \
                      char *buf)
{
        struct platform_device *pdev = to_platform_device(dev);
        unsigned int value = ...;
        return snprintf(buf, PAGE_SIZE, "%u\n", value);
}