{"id":404,"date":"2024-07-18T11:30:15","date_gmt":"2024-07-18T09:30:15","guid":{"rendered":"https:\/\/wi.pb.edu.pl\/p\/?page_id=404"},"modified":"2024-07-18T11:30:15","modified_gmt":"2024-07-18T09:30:15","slug":"przykladowy-sterownik-blokowy","status":"publish","type":"page","link":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/","title":{"rendered":"Przyk\u0142adowy sterownik blokowy"},"content":{"rendered":"<pre>#include &lt;linux\/kernel.h&gt;\r\n#include &lt;linux\/sched.h&gt;\r\n#include &lt;linux\/fs.h&gt;\r\n#include &lt;linux\/errno.h&gt;\r\n#include &lt;linux\/malloc.h&gt;\r\n#include &lt;linux\/module.h&gt;\r\n#include &lt;linux\/blkdev.h&gt;\r\n\r\n\/\/ Niezbedne do poprawngo wlaczenia blk.h\r\n#define MAJOR_NR 50\r\n#define DEVICE_NAME \"simpleblk\"\r\n#define DEVICE_OFF(d)\r\n#include &lt;linux\/blk.h&gt;\r\n\r\n\r\nstatic char *buffer;\r\n\/\/ size rozmiar w MB, mozna zmienic ladujac modul\r\nint size=1;\r\nint nblocks;\r\n\r\nint simple_open(struct inode *inode,struct file *file) \r\n{\t\r\n\tMOD_INC_USE_COUNT;\r\n\treturn 0;\t\r\n}\r\n\r\nvoid simple_release(struct inode *inode,struct file *file) \r\n{\r\n\tMOD_DEC_USE_COUNT;\r\n}\r\n\r\n\r\n\r\nstruct file_operations simple_ops = {\r\n\tread: block_read, write:block_write,\r\n\topen:simple_open, release:simple_release};\r\n\r\n\r\n#define SECTORSIZE 512\r\n\r\nvoid simple_request() {\r\n\tchar *start;\r\n\tint bytes;\r\n\t\r\n\/\/ Petla nieskonczona - bo INIT_REQUEST zawiera return\r\n\twhile (1) {\r\n\t\tINIT_REQUEST;\t\r\n\t\tstart=buffer+CURRENT-&gt;sector*SECTORSIZE;\r\n\t\tbytes=CURRENT-&gt;current_nr_sectors*SECTORSIZE;\r\n\t\tif (CURRENT-&gt;sector*SECTORSIZE+bytes &gt; size) {\r\n\t\t\tprintk(DEVICE_NAME \": buffer overrun\\n\");\r\n\t\t\tend_request(0);\r\n\t\t} else {\r\n\t\t\tif (CURRENT-&gt;cmd==WRITE) {\r\n\t\t\t\tmemcpy(start,CURRENT-&gt;buffer,bytes);\r\n\t\t\t} else if (CURRENT-&gt;cmd==READ) {\r\n\t\t\t\tmemcpy(CURRENT-&gt;buffer,start,bytes);\r\n\t\t\t} else \r\n\t\t\t\tpanic(DEVICE_NAME \": unknown command\");\r\n\t\t\tCURRENT-&gt;nr_sectors-=CURRENT-&gt;current_nr_sectors;\r\n\t\t\tend_request(1);\r\n\t\t}\r\n\t}\t\t\t\r\n}\r\n\r\nint init_module() \r\n{\r\n\r\n\r\n\tsize*=(1024*1024);\r\n\tbuffer=vmalloc(size);\r\n\tif (buffer==NULL) {\r\n\t\tprintk(DEVICE_NAME \": Buffer allocation failed\\n\");\r\n\t\treturn -1;\r\n\t}\r\n\tif (register_blkdev(MAJOR_NR,DEVICE_NAME,&amp;simple_ops)&lt;0) {\r\n\t\tprintk(DEVICE_NAME \": Device registration failed\\n\");\r\n\t\tvfree(buffer);\r\n\t\treturn -1;\r\n\t}\r\n\tnblocks=size\/1024;\r\n\tblk_size[MAJOR_NR]=&amp;nblocks;\r\n        blk_dev[MAJOR_NR].request_fn=simple_request;\r\n        printk(DEVICE_NAME \": Initialization successful\\n\");\r\n        printk(DEVICE_NAME \": %d blocks\\n\",nblocks);\r\n\treturn 0;\r\n}\r\n\r\nvoid cleanup_module() {\r\n\tvfree(buffer);\r\n\tunregister_blkdev(MAJOR_NR,\"simpleblk\");\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;linux\/kernel.h&gt; #include &lt;linux\/sched.h&gt; #include &lt;linux\/fs.h&gt; #include &lt;linux\/errno.h&gt; #include &lt;linux\/malloc.h&gt; #include &lt;linux\/module.h&gt; #include &lt;linux\/blkdev.h&gt; \/\/<a class=\"read-more\" href=\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\" title=\"Poka\u017c artyku\u0142 Przyk\u0142adowy sterownik blokowy\">wi\u0119cej<\/a><\/p>\n","protected":false},"author":14,"featured_media":0,"parent":323,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-404","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\" \/>\n<meta property=\"og:description\" content=\"#include &lt;linux\/kernel.h&gt; #include &lt;linux\/sched.h&gt; #include &lt;linux\/fs.h&gt; #include &lt;linux\/errno.h&gt; #include &lt;linux\/malloc.h&gt; #include &lt;linux\/module.h&gt; #include &lt;linux\/blkdev.h&gt; \/\/wi\u0119cej\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\" \/>\n<meta property=\"og:site_name\" content=\"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\",\"url\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\",\"name\":\"Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\",\"isPartOf\":{\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/#website\"},\"datePublished\":\"2024-07-18T09:30:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"dr hab. in\u017c. Wojciech Kwedlo\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dydaktyka\",\"item\":\"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Przyk\u0142adowy sterownik blokowy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wi.pb.edu.pl\/p\/#website\",\"url\":\"https:\/\/wi.pb.edu.pl\/p\/\",\"name\":\"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wi.pb.edu.pl\/p\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/","og_locale":"pl_PL","og_type":"article","og_title":"Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","og_description":"#include &lt;linux\/kernel.h&gt; #include &lt;linux\/sched.h&gt; #include &lt;linux\/fs.h&gt; #include &lt;linux\/errno.h&gt; #include &lt;linux\/malloc.h&gt; #include &lt;linux\/module.h&gt; #include &lt;linux\/blkdev.h&gt; \/\/wi\u0119cej","og_url":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/","og_site_name":"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/","url":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/","name":"Przyk\u0142adowy sterownik blokowy - Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","isPartOf":{"@id":"https:\/\/wi.pb.edu.pl\/p\/#website"},"datePublished":"2024-07-18T09:30:15+00:00","breadcrumb":{"@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/przykladowy-sterownik-blokowy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wi.pb.edu.pl\/p\/"},{"@type":"ListItem","position":2,"name":"dr hab. in\u017c. Wojciech Kwedlo","item":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/"},{"@type":"ListItem","position":3,"name":"Dydaktyka","item":"https:\/\/wi.pb.edu.pl\/p\/wojciech-kwedlo\/dydaktyka\/"},{"@type":"ListItem","position":4,"name":"Przyk\u0142adowy sterownik blokowy"}]},{"@type":"WebSite","@id":"https:\/\/wi.pb.edu.pl\/p\/#website","url":"https:\/\/wi.pb.edu.pl\/p\/","name":"Strony pracownik\u00f3w Wydzia\u0142u Informatyki Politechniki Bia\u0142ostockiej","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wi.pb.edu.pl\/p\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"}]}},"_links":{"self":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/comments?post=404"}],"version-history":[{"count":2,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/404\/revisions"}],"predecessor-version":[{"id":406,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/404\/revisions\/406"}],"up":[{"embeddable":true,"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/pages\/323"}],"wp:attachment":[{"href":"https:\/\/wi.pb.edu.pl\/p\/wp-json\/wp\/v2\/media?parent=404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}