On 14/05/15 12:38, Guo, Yejun wrote: > Thanks Daniel Kurtz and Emil Velikov for the reply. > > In general, drm APIs are invoked by user mode drivers, but, I want to mimic > the behavior of driver in my unit test to create buffer objects. After do > some searching, I wrote the following code in my unit test (user mode simple > application based on libdrm). It does work in my old system (cannot go back > to it and so do not know the exact version), but it failed when porting the > unit test based on latest libdrm code. I stepped into function drmOpenByName > and thought it is a typo. > > int fd = drmOpen("i915", NULL); > drm_intel_bufmgr* bufmgr = drm_intel_bufmgr_gem_init(fd, 1024); > drm_intel_bo * bo = drm_intel_bo_alloc(bufmgr,...); > I honestly hope that your code has error checking and you've dropped them here for simplicity.
> After read the comment, looks like the above code is not used as expected. (I > execute the utest together with X11 is running). > > Back to my original purpose, what's the correct way for me to create bo? > One possible way is to open("/dev/dri/renderDxxx"), but what should I do if > the kernel version is too low to has this feature? > Afaict there are a few solutions possible (listed in order of preference): 1. Run your test without/outside X 2. Opt for render nodes, but it again depends on exactly what your program does*. 3. Use open(...cardX...) directly, but you might need to set/drop master depending your program. Needless to say personally I would opt for 1 :) -Emil * You can confirm with the rest of the Intel crew if your program requires master/root/auth from the drm and/or i915 module. Alternatively you can check with the kernel $ git grep "DRM_AUTH\|DRM_MASTER\|DRM_ROOT_ONLY" -- $(linux_top)/drivers/gpu/drm