{"id":795,"date":"2009-07-09T09:18:11","date_gmt":"2009-07-09T09:18:11","guid":{"rendered":"http:\/\/akuadi.org\/life\/?p=795"},"modified":"2009-07-09T09:18:49","modified_gmt":"2009-07-09T09:18:49","slug":"linux-device-driver-training","status":"publish","type":"post","link":"https:\/\/akuadi.org\/life\/blog\/2009\/07\/09\/linux-device-driver-training\/","title":{"rendered":"Linux Device Driver Training"},"content":{"rendered":"<p>Good news.. i just found cool training for the developer or Validation team.. especially who work with the new hardware\/driver&#8230; You can use the knowledge to implement it in your daily task..<strong><strong><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Adding a Driver to the Kernel Tree<\/span><\/strong><\/strong><br \/>\n<strong><span style=\"font-size: x-small;\"><span style=\"font-family: Arial,Helvetica,sans-serif;\"><strong>Details: <a href=\"http:\/\/www.linuxcertified.com\/linux-device-driver-training.html\" target=\"_blank\" rel=\"noopener\">Linux Certified<\/a><\/strong><\/span><\/span><\/strong><\/p>\n<blockquote><p><span style=\"font-family: Arial,Helvetica,sans-serif; color: #000033; font-size: medium;\"><strong>Linux                      Device Driver Training<\/strong><\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif;\"><strong><span style=\"font-size: x-small;\">Linux                      Device Driver Development Course<\/span><\/strong> <\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Overall                      objective of this class is to teach attendees on how to develop                      device drivers for Linux.<\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">This three                      day course provides substantial practice with the key steps                      in developing Linux device drivers. The course shows attendees                      how device drivers work with the Linux kernel, how to compile                      and load drivers, how to debug drivers, as well as other essential                      topics.<\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">This course                      acquaints developers with the issues essential for Linux device                      driver development. The course progresses through a number                      of topics. Each topic is presented along with a supporting                      laboratory exercise before moving on to the next topic.<br \/>\n<\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Attendees                      will spend approximately 50 percent of the class time actually                      gaining hands-on experience with these topics.<br \/>\n<\/span><\/p>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">The                      following modules will be covered during the class: <\/span><\/p>\n<table border=\"0\" cellspacing=\"1\" cellpadding=\"0\" width=\"100%\">\n<tbody>\n<tr>\n<td colspan=\"2\">\n<table border=\"0\" cellpadding=\"5\" width=\"100%\">\n<tbody>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Devices in Linux<br \/>\n<\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Devices treated as files, the \/dev directory<br \/>\nDevice classes \u2013 character, block, network, pipe<br \/>\nCreating device files with mknod<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> <strong> User Space Driver APIs<\/strong><br \/>\n<\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Low-level API<br \/>\nStreams API<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><strong>How Loadable Modules Work<\/strong><\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Benefits of loadable modules<br \/>\nCorrect use of insmod, modprobe, rmmod, and lsmod<br \/>\nPassing parameters to a loadable module<br \/>\nThe GPL and your driver code<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> <strong> <strong> Compiling, Loading And Exporting<\/strong> <\/strong><br \/>\n<\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Writing a simple module<br \/>\nCompiling modules<br \/>\nLoading\/unloading modules<br \/>\nExporting symbols from a loadable module<br \/>\nCreating stacked loadable modules<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Character                                Devices<\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Major and minor numbers<br \/>\nRegistering character device file<br \/>\nDriver methods \u2013 the file operations table<br \/>\nTransferring data to\/from User Space<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"> <strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Tracing and Debugging<\/span><\/strong><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> printk for debugging<br \/>\nDevice information in \/proc<br \/>\nstrace to track system calls<br \/>\nksyms and ksymoops<br \/>\nDebuggers \u2013 gdb and kgdb<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Blocking and Wait Queues<\/span><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Multi-tasking<br \/>\nSchedule()<br \/>\nWait Queues<br \/>\nSave sleeping<br \/>\nPoll()<\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"> <strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Accessing Hardware<\/span><\/strong><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">I\/O ports vs. memory mapping<br \/>\nAllocating and mapping I\/O space<br \/>\nFunctions for reading and writing I\/O ports<br \/>\nBarriers<br \/>\nAccessing I\/O from User Space <\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"> <strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Handling Interrupts<\/span><\/strong><\/th>\n<td><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Interrupt Handler functions<br \/>\nRestrictions of kernel code running in interrupt context<br \/>\nDeferred interrupt handling tasklets and workqueues <\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> <strong> Accessing PCI hardware<\/strong><br \/>\n<\/span><\/th>\n<td><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">detecting PCI devices<br \/>\nResour<\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">ce conflicts<\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><br \/>\nVendor<\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">\/device IDs<br \/>\n<\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">I\/O mapping <\/span><\/span><\/td>\n<\/tr>\n<tr>\n<th align=\"left\" valign=\"top\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><strong>USB Drivers<\/strong> <\/span><\/th>\n<td><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">USB structure and Topology<br \/>\nE<\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">ndpoints, interfaces and configurations<br \/>\n<span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">USB Request <\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">B<\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">locks<\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">(urbs)<span><br \/>\n<\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Driver Structure and organization<br \/>\n<span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">&#8220;Gadget&#8221; drivers<\/span> <\/span><\/span><\/span><\/span><\/td>\n<\/tr>\n<tr>\n<th height=\"86\" align=\"left\" valign=\"top\"> <strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Managing Time<\/span><\/strong><\/th>\n<td><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Timer interrupts and jiffies<br \/>\nShort Delays<br \/>\nTask queues<br \/>\nKernel Timers<\/span><\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"42%\" height=\"19\" align=\"left\" valign=\"top\"><strong><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">B<\/span><\/strong><strong><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">lock Device Drivers<\/span><\/strong><\/td>\n<td width=\"58%\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Block Device Drivers<br \/>\nHeader files<br \/>\nRegistering block drivers<br \/>\nThe block_device_operations structure<br \/>\nSpecial Methods<br \/>\n<\/span><\/td>\n<\/tr>\n<tr>\n<td height=\"19\" valign=\"top\"><strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><br \/>\nNetwork Drivers<\/span><\/strong><\/td>\n<td height=\"19\"><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><br \/>\nThe net_device structure<br \/>\nSockets<br \/>\nNaming scheme and registration<br \/>\nNetwork driver methods<br \/>\nNAPI the new API<\/p>\n<p><\/span><\/td>\n<\/tr>\n<tr>\n<td height=\"19\" valign=\"top\"><strong> <span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Adding a Driver to the Kernel Tree<\/span><\/strong><\/td>\n<td height=\"19\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"> Where to put it &#8211; <\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">kernel layout for drivers<\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><br \/>\nModifying the Makefile<\/span><\/span><span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\"><br \/>\n<\/span><\/span><\/span><span style=\"font-family: Arial,Helvetica,sans-serif; font-size: x-small;\">Adding it to configuration options &#8211; the Kconfig file<\/span><\/p><\/blockquote>\n<p><span style=\"font-family: Arial,Helvetica,sans-serif;\"><br \/>\n<span style=\"font-weight: bold;\">Course Objectives:<\/span><\/span><\/p>\n<p><span style=\"font-size: x-small;\">\u2022 To provide an understanding of the essentials                    of Linux device drivers.<br \/>\n\u2022 To give you practical experience in developing Linux                    device drivers.<br \/>\n\u2022 The steps necessary to add devices to a Linux system<br \/>\n\u2022 How to determine what hardware is present on a Linux                    system<br \/>\n\u2022 The purpose and functionality of device drivers<br \/>\n\u2022 Compiling and linking device drivers<br \/>\n\u2022 Trade-offs between loadable modules and drivers compiled                    into the kernel. <\/span><\/p>\n<p><span style=\"font-weight: bold;\">Who Should Attend:<\/span><br \/>\n<span style=\"font-size: x-small;\">The course is designed for software engineers                    who are new to Linux device drivers. Attendees should have experience                    with C, be able to perform basic Unix commands, and have some                    experience with the basic Gnu tools of gcc, gdb, and make. <\/span><\/p>\n<p><span style=\"font-weight: bold;\">Course Materials<\/span><br \/>\n<span style=\"font-size: x-small;\">The class materials for this course have been                    meticlously designed by leading practioners in this area. The                    workshop materials include a comprehensive student workbook                    and CD. The workbook contains all of the slides used in the                    course as well as hands-on lab exercises.\u00a0 The CD contains                    the lab exercise code as well as a large amount of Linux software.<\/span><br \/>\n<br style=\"font-weight: bold;\" \/> <span style=\"font-weight: bold;\">Course Workshop and Set-up:<\/span><br \/>\n<span style=\"font-size: x-small;\">The workshop makes use of standard PC\u2019s                    with a desktop Linux distribution for development. The course                    will make use of PC&#8217;s and PC devices as examples.<br \/>\n<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Good news.. i just found cool training for the developer or Validation team.. especially who work with the new hardware\/driver&#8230; You can use the knowledge to implement it in your daily task..Adding a Driver to the Kernel Tree Details: Linux Certified Linux Device Driver Training Linux Device Driver Development Course Overall objective of this class [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84,25,34,74],"tags":[],"class_list":["post-795","post","type-post","status-publish","format-standard","hentry","category-driver","category-hardware","category-intel","category-kernel"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/posts\/795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/comments?post=795"}],"version-history":[{"count":0,"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/posts\/795\/revisions"}],"wp:attachment":[{"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/media?parent=795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/categories?post=795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/akuadi.org\/life\/wp-json\/wp\/v2\/tags?post=795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}