device drivers part 12
TRANSCRIPT
-
7/27/2019 Device Drivers Part 12
1/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 1/7
Device Drivers, Part 12: USB Drivers inLinux ContinuedByAnil Kumar Pugalia on November 1, 2011 in Coding, Developers 11 Comments
The 1 2th part of the series on
Linux device drivers takes you
further along the path to
writing your first USB driver in
Linux a continuation from theprevious article.
Pugs continued, Lets build upon the
USB device driver coded in our
previous session, using the same
handy JetFlash pen drive from
Transcend, with the vendor ID 0x058f
and product ID 06387. For that, lets
dig further into the USB protocol, and
then convert ourlearning into code.
USB endpoints and theirtypesDepending on the type and attributes of information to be transferred, a USB device may have
one or more endpoints, each belonging to one of the following four categories:
Control to transfer control information. Examples include resetting the device, querying
information about the device, etc. All USB devices always have the default control endpoint
point as zero.
Interrupt for small and fast data transfers, typically of up to 8 bytes. Examples include data
transfer for serial ports, human interface devices (HIDs) like keyboards, mouse, etc.
Bulk for big but comparatively slower data transfers. A typical example is data transfers for
mass-storage devices.
Isochronous for big data transfers with a bandwidth guarantee, though data integrity may
not be guaranteed. Typical practical usage examples include transfers of time-sensitive datalike audio, video, etc.
Additionally, all but control endpoints could be in or out, indicating the direction of data
transfer; in indicates data flow from the USB device to the host machine, and out, the other
way.
Technically, an endpoint is identified using an 8-bit number, the most significant bit (MSB) of
which indicates the direction 0 means out, and 1 means in. Control endpoints are bi-
directional, and the MSB is ignored.
Figure 1 shows a typical snippet of USB device specifications for devices connected on a system.
RSS Feed Twitter
Search for: Search
Get Connected
LINUX For You on
+2,490
Follow
Search
HOME REVIEWS HOW-TOS CODING INTERVIEWS FEATURES OVERVIEW BLOGS SERIES IT ADMIN
Wri te For Us Subm it Tips Subs cribe to Prin t Editio n
http://www.fleminggulf.com/conferenceview/2nd-Annual-Cloud-Computing-Summit/464http://www.linuxforu.com/tag/linux-device-drivers-series/http://www.linuxforu.com/http://www.linuxforu.com/category/reviews/http://www.linuxforu.com/category/how-tos/http://www.linuxforu.com/category/coding/http://www.linuxforu.com/category/interviews/http://www.linuxforu.com/http://osidays.com/http://electronicsforu.com/electronicsforu/subscription/subsc2scheme.asphttp://www.linuxforu.com/submit-your-tips-tricks/http://www.linuxforu.com/write-for-linux-for-you/http://www.linuxforu.com/category/sysadmins/http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/category/blogs/http://www.linuxforu.com/category/overview/http://www.linuxforu.com/category/features/http://www.linuxforu.com/category/interviews/http://www.linuxforu.com/category/coding/http://www.linuxforu.com/category/how-tos/http://www.linuxforu.com/category/reviews/http://www.linuxforu.com/http://www.linuxforu.com/http://www.fleminggulf.com/conferenceview/2nd-Annual-Cloud-Computing-Summit/464http://rchostingsummit.com/register/?cp_code=OSFYhttp://electronicsforu.com/electronicsforu/subscription/subsc2scheme.asphttps://plus.google.com/110152211622615274910https://plus.google.com/109472979402338498176https://plus.google.com/108540943155986110451https://plus.google.com/117003009004817886820https://plus.google.com/114351092187382287584https://twitter.com/#!/linuxforyouhttp://feeds.feedburner.com/LinuxForYouhttp://www.linuxforu.com/2011/10/usb-drivers-in-linux-1/http://www.linuxforu.com/tag/linux-device-drivers-series/http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#disqus_threadhttp://www.linuxforu.com/category/developers/http://www.linuxforu.com/category/coding/http://www.linuxforu.com/author/anil-kumar-pugalia/http://osidays.com/ -
7/27/2019 Device Drivers Part 12
2/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 2/7
Figure 1: USB's proc w indow snippet (click for larger view )
To be specific, the E: lines in the figure show examples of an interrupt endpoint of a UHCI Host
Controller, and two bulk endpoints of the pen drive under consideration. Also, the endpoint
numbers (in hex) are, respectively, 0x81, 0x01 and 0x82 the MSB of the first and third being
1, indicating in endpoints, represented by (I) in the figure; the second is an (O) or out
endpoint. MxPS specifies the maximum packet size, i.e., the data size that can be transferred in a
single go. Again, as expected, for the interrupt endpoint, it is 2 (
-
7/27/2019 Device Drivers Part 12
3/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 3/7
Yes, definitely; thats what I am going to tell you about, next. Do you remember that as soon as a
USB device is plugged into the system, the USB host controller driver populates its information
into the generic USB core layer? To be precise, it puts that into a set of structures embedded
into one another, exactly as per the USB specifications, Pugs replied.
The following are the exact data structures defined in , ordered here in reverse,
for flow clarity:
So, with access to the struct usb_device handle for a specific device, all the USB-specific
information about the device can be decoded, as shown through the /proc window. But how
does one get the device handle?
In fact, the device handle is not available directly in a driver; rather, the per-interface handles
(pointers to struct usb_interface) are available, as USB drivers are written for device
interfaces rather than the device as a whole.
Recall that the probe and disconnect callbacks, which are invoked by the USB core for every
interface of the registered device, have the corresponding interface handle as their first
parameter. Refer to the prototypes below:
So, with the interface pointer, all information about the corresponding interface can be accessed
and to get the container device handle, the following macro comes to the rescue:
Adding this new learning into last months registration-only dr iver gets the following code listing
(pen_info.c):
1234
56789
10111213141516171819202122232425
2627282930
structusb_device{ structusb_device_descriptor descriptor;
structusb_host_config *config, *actconfig; };structusb_host_config{ structusb_config_descriptor desc; structusb_interface *interface[USB_MAXINTERFACES]; };structusb_interface{ structusb_host_interface *altsetting /* array */, *cur_altsetting; };structusb_host_interface{ structusb_interface_descriptor desc; structusb_host_endpoint *endpoint /* array */; };
structusb_host_endpoint{ structusb_endpoint_descriptor desc; };
int(*probe)(structusb_interface *interface, conststructusb_device_id *id);void(*disconnect)(structusb_interface *interface);
structusb_device device = interface_to_usbdev(interface);
12
3456789
1011121314151617181920212223
24252627282930313233
#include #include
#include staticstructusb_device *device;staticintpen_probe(structusb_interface *interface, conststructusb_device_id{ structusb_host_interface *iface_desc; structusb_endpoint_descriptor *endpoint; inti;
iface_desc = interface->cur_altsetting; printk(KERN_INFO "Pen i/f %d now probed: (%04X:%04X)\n", iface_desc->desc.bInterfaceNumber, id->idVendor, id->idProduct); printk(KERN_INFO "ID->bNumEndpoints: %02X\n", iface_desc->desc.bNumEndpoints); printk(KERN_INFO "ID->bInterfaceClass: %02X\n", iface_desc->desc.bInterfaceClass);
for(i = 0; i < iface_desc->desc.bNumEndpoints; i++) { endpoint = &iface_desc->endpoint[i].desc;
printk(KERN_INFO "ED[%d]->bEndpointAddress: 0x%02X\n",
i, endpoint->bEndpointAddress); printk(KERN_INFO "ED[%d]->bmAttributes: 0x%02X\n", i, endpoint->bmAttributes); printk(KERN_INFO "ED[%d]->wMaxPacketSize: 0x%04X (%d)\n", i, endpoint->wMaxPacketSize, endpoint->wMaxPacketSize); }
device = interface_to_usbdev(interface);
-
7/27/2019 Device Drivers Part 12
4/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 4/7
Then, the usual steps for any Linux device driver may be repeated, along with the pen drive
steps:
Build the driver (pen_info.ko file) by running make.
Load the driver using insmod pen_info.ko.
Plug in the pen drive (after making sure that the usb-storage driver is not already loaded).
Unplug the pen drive.
Check the output ofdmesg for the logs.
Unload the driver using rmmod pen_info.
Figure 2 shows a snippet of the above steps on Pugs system. Remember to ensure (in the
output ofcat /proc/bus/usb/devices) that the usual usb-storage driver is not the one
associated with the pen drive interface, but rather the pen_info driver.
Figure 2: Output of dmesg
Summing up
Before taking another break, Pugs shared two of the many mechanisms for a driver to specify its
34353637383940414243444546474849
505152535455565758596061626364656667686970
717273
return0;}staticvoidpen_disconnect(structusb_interface *interface){ printk(KERN_INFO "Pen i/f %d now disconnected\n", interface->cur_altsetting->desc.bInterfaceNumber);}staticstructusb_device_id pen_table[] ={ { USB_DEVICE(0x058F, 0x6387) }, {} /* Terminating entry */};MODULE_DEVICE_TABLE (usb, pen_table);
staticstructusb_driver pen_driver ={ .name = "pen_driver", .probe = pen_probe, .disconnect = pen_disconnect, .id_table = pen_table,};staticint__init pen_init(void){ returnusb_register(&pen_driver);}staticvoid__exit pen_exit(void){ usb_deregister(&pen_driver);}module_init(pen_init);module_exit(pen_exit);
MODULE_LICENSE("GPL");MODULE_AUTHOR("Anil Kumar Pugalia ");MODULE_DESCRIPTION("USB Pen Info Driver");
http://www.linuxforu.com/wp-content/uploads/2011/11/figure_22_dmesg_log.png -
7/27/2019 Device Drivers Part 12
5/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 5/7
Anil Kumar Pugalia
The author is a freelance trainer in Linux internals, Linux device drivers,
embedded Linux and related topics. Prior to this, he had worked at Intel
and Nvidia. He has been exploring Linux since 1994. A gold medallis t
from the Indian Institute of Science, Linux and knowledge-sharing are two
of his many passions.
Connect with him: Website - Twitter- Facebook - Google+
device to the USB core, using the struct usb_device_id table. The first one is by specifying
the pair using the USB_DEVICE() macro (as done above). The
second one is by specifying the device class/category using the USB_DEVICE_INFO() macro. In
fact, many more macros are available in for various combinations. Moreover,
multiple of these macros could be specified in the usb_device_id table (terminated by a null
entry), for matching with any one of the criteria, enabling to write a single driver for possibly
many devices.
Earlier, you mentioned writing multiple drivers for a single device, as well. Basically, how do we
selectively register or not register a particular interface of a USB device?, queried Shweta.
Sure. Thats next in line of our discussion, along with the ultimate task in any device driver the data-transfer mechanisms, replied Pugs.
Related Posts:
Device Drivers, Part 11: USB Drivers in Linux
Device Drivers, Part 13: Data Transfer to and from USB Devices
Device Drivers, Part 6: Decoding Character Device File Operations
Device Drivers, Part 5: Character Device Files Creation & Operations
Device Drivers, Part 4: Linux Character Drivers
Tags: LFY November 2011, linux device drivers, Linux Device Drivers Series, mass storage devices, serial ports, usb device driver,
usb devices, USB host controller driver, usb protocol
Article written by:
11 comments
Leave a message...
NewestNewest CommunityCommunity ShareShare
anil kumar
how to know the functions
pen_probe,pen_disconnect (where these functions available and how to find theheadder files)
aadhirai
I have tried the code in Part 11 which was working for me.
Here I am not getting the /dev/pen0 listed on my system (Linux Ubuntu 12.04), even
when I copy paste the code from here....
compiled & followed all your steps accordingly..
Will you please help me in completing this ?
1
David
Its Fantastic ! !
Thank you for your valuable Linux device driver articles.
Could you please start the same for BSP also.
0
Previous Post
Agile Software Development Made Faster, More
Secure
Next Post
Lisp: Tears of Joy, Part 6
http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/agile-software-development-made-faster-more-secure/http://www.linuxforu.com/tag/usb-devices/http://www.linuxforu.com/tag/usb-host-controller-driver/http://www.linuxforu.com/tag/usb-protocol/http://www.linuxforu.com/2011/05/decoding-character-device-file-operations/http://www.linuxforu.com/2011/11/lisp-tears-of-joy-part-6/http://www.linuxforu.com/2011/11/agile-software-development-made-faster-more-secure/http://www.linuxforu.com/tag/usb-protocol/http://www.linuxforu.com/tag/usb-host-controller-driver/http://www.linuxforu.com/tag/usb-devices/http://www.linuxforu.com/tag/usb-device-driver/http://www.linuxforu.com/tag/serial-ports/http://www.linuxforu.com/tag/mass-storage-devices/http://www.linuxforu.com/tag/linux-device-drivers-series/http://www.linuxforu.com/tag/linux-device-drivers/http://www.linuxforu.com/tag/lfy-november-2011/http://www.linuxforu.com/2011/02/linux-character-drivers/http://www.linuxforu.com/2011/04/character-device-files-creation-operations/http://www.linuxforu.com/2011/05/decoding-character-device-file-operations/http://www.linuxforu.com/2011/12/data-transfers-to-from-usb-devices/http://www.linuxforu.com/2011/10/usb-drivers-in-linux-1/http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-900120920http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-934158359http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-976934009http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://plus.google.com/103727326491474549031http://facebook.com/anil.pugaliahttp://twitter.com/anil_pugaliahttp://profession.sarika-pugs.com/http://www.linuxforu.com/author/anil-kumar-pugalia/ -
7/27/2019 Device Drivers Part 12
6/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 6/7
anil_pugalia >
I doubt, if it would be possible, as currently doing the same for mathematics in
open source.
ME LWIN JOS E
I got an error when i tried to remove the "usb_storage"
melwin-Satellite-L640 USB_2 # rmmod usb_storage
ERROR: Module usb_storage is in use by ums_realtek
Here is the output for "lsusb"
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 005: ID 0930:0214 Toshiba Corp.
Bus 002 Device 006: ID 04f2:b1d6 Chicony Electronics Co., Ltd
MELWIN JOSE >
solved :)
ums_realtk is a module that depends in usb_storage.just "rmmod ums_realtk"
see more
MenDuong
Dear, When I pug and unplug my USB driver. I can't see message in dmesg as above.
My dmesg as follow:
SELinux: initialized (dev sdd1, type vfat), uses genfs_contexts
usb 2-1: USB disconnect, address 5
SELinux: initialized (dev sdb4, type fuseblk), uses genfs_contexts
lo: Disabled Privacy Extensions
SELinux: initialized (dev proc, type proc), uses genfs_contexts
lo: Disabled Privacy Extensions
SELinux: initialized (dev proc, type proc), uses genfs_contexts
lo: Disabled Privacy Extensions
SELinux: initialized dev roc t e roc uses enfs contexts
anil_pugalia >
Because the usb-storage driver is loaded. You need to make sure that is
unloaded, as mentioned in the article.
MenDuong >
Thank you. Please, how to unload usb-storage?
micheal >
go drivers path and then type rmmod usb-storage
anil_pugalia >
If it is listed in lsmod, just do a "rmmod usb-storage". Otherwise,
you'd have to recompile your kernel, by making usb-storage as a
module.
2
http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746878107http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746959955http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746878107http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-773716775http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746779112http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746878107http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746766934http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746779112http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-746766934http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-768750383http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-772347496http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-768750383http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-900120920http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#comment-922215630http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/# -
7/27/2019 Device Drivers Part 12
7/7
8/13/13 Device Drivers, Part 12: USB Drivers in Linux Continued - LINUX For You
www.linuxforu.com/2011/11/usb-drivers-in-linux-2/ 7/7
r
Reviews How-Tos Coding Interviews Features Overview Blogs
Search
Popular tags
Linux, ubuntu, Java, MySQL, Google, python, Fedora,Android, PHP, C, html,
w eb applications, India, Microsoft, unix, Window s, Red Hat, Oracle, Security,
Apache , xml, LFY April 2012, FOSS, GNOME, http, JavaScript, LFY June
2011, open source, RAM, operating systems
For You & Me
DevelopersSysadmins
Open Gurus
CXOs
Columns
All published articles are released underCreative Commons Attribution-NonCommercial 3.0 Unported License, unless otherw ise noted.
LINUX For You is powered by WordPress, which gladly sits on top of a CentOS-based LEMP stack..
http://creativecommons.org/licenses/by-nc/3.0/http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29http://www.centos.org/http://wordpress.org/http://www.linuxforu.com/http://creativecommons.org/licenses/by-nc/3.0/http://www.linuxforu.com/category/columns/http://www.linuxforu.com/category/cxo/http://www.linuxforu.com/category/power-users/http://www.linuxforu.com/category/sysadmins/http://www.linuxforu.com/category/developers/http://www.linuxforu.com/category/everyone/http://www.linuxforu.com/tag/operating-systems/http://www.linuxforu.com/tag/ram/http://www.linuxforu.com/tag/open-source/http://www.linuxforu.com/tag/lfy-june-2011/http://www.linuxforu.com/tag/javascript/http://www.linuxforu.com/tag/http/http://www.linuxforu.com/tag/gnome/http://www.linuxforu.com/tag/foss/http://www.linuxforu.com/tag/lfy-april-2012/http://www.linuxforu.com/tag/xml/http://www.linuxforu.com/tag/apache/http://www.linuxforu.com/tag/security/http://www.linuxforu.com/tag/oracle/http://www.linuxforu.com/tag/red-hat/http://www.linuxforu.com/tag/windows/http://www.linuxforu.com/tag/unix/http://www.linuxforu.com/tag/microsoft/http://www.linuxforu.com/tag/india/http://www.linuxforu.com/tag/web-applications/http://www.linuxforu.com/tag/html/http://www.linuxforu.com/tag/c/http://www.linuxforu.com/tag/php/http://www.linuxforu.com/tag/android/http://www.linuxforu.com/tag/fedora/http://www.linuxforu.com/tag/python/http://www.linuxforu.com/tag/google/http://www.linuxforu.com/tag/mysql/http://www.linuxforu.com/tag/java/http://www.linuxforu.com/tag/ubuntu/http://www.linuxforu.com/tag/linux/http://www.linuxforu.com/http://www.linuxforu.com/category/blogs/http://www.linuxforu.com/category/overview/http://www.linuxforu.com/category/features/http://www.linuxforu.com/category/interviews/http://www.linuxforu.com/category/coding/http://www.linuxforu.com/category/how-tos/http://www.linuxforu.com/category/reviews/http://www.linuxforu.com/2011/11/usb-drivers-in-linux-2/#http://linuxforyou.disqus.com/device_drivers_part_12_usb_drivers_in_linux_continued/latest.rsshttp://disqus.com/