|
18 | 18 |
|
19 | 19 | <h2 class='titleHead'>The Linux Kernel Module Programming Guide</h2>
|
20 | 20 | <div class='author'><span class='ecrm-1200'>Peter Jay Salzman, Michael Burian, Ori Pomerantz, Bob Mottram, Jim Huang</span></div><br />
|
21 |
| -<div class='date'><span class='ecrm-1200'>October 26, 2024</span></div> |
| 21 | +<div class='date'><span class='ecrm-1200'>November 5, 2024</span></div> |
22 | 22 |
|
23 | 23 |
|
24 | 24 |
|
@@ -2552,47 +2552,48 @@ <h3 class='sectionHead' id='sysfs-interacting-with-your-module'><span class='tit
|
2552 | 2552 | <a id='x1-38147r42'></a><span class='ecrm-0500'>42</span>
|
2553 | 2553 | <a id='x1-38149r43'></a><span class='ecrm-0500'>43</span><span class='ectt-0800'> error = sysfs_create_file(mymodule, &myvariable_attribute.attr);</span>
|
2554 | 2554 | <a id='x1-38151r44'></a><span class='ecrm-0500'>44</span><span class='ectt-0800'> </span><span id='textcolor1027'><span class='ectt-0800'>if</span></span><span class='ectt-0800'> (error) {</span>
|
2555 |
| -<a id='x1-38153r45'></a><span class='ecrm-0500'>45</span><span class='ectt-0800'> pr_info(</span><span id='textcolor1028'><span class='ectt-0800'>"failed to create the myvariable file "</span></span> |
2556 |
| -<a id='x1-38155r46'></a><span class='ecrm-0500'>46</span><span class='ectt-0800'> </span><span id='textcolor1029'><span class='ectt-0800'>"in /sys/kernel/mymodule</span></span><span id='textcolor1030'><span class='ectt-0800'>\n</span></span><span id='textcolor1031'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>);</span> |
2557 |
| -<a id='x1-38157r47'></a><span class='ecrm-0500'>47</span><span class='ectt-0800'> }</span> |
2558 |
| -<a id='x1-38159r48'></a><span class='ecrm-0500'>48</span> |
2559 |
| -<a id='x1-38161r49'></a><span class='ecrm-0500'>49</span><span class='ectt-0800'> </span><span id='textcolor1032'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> error;</span> |
2560 |
| -<a id='x1-38163r50'></a><span class='ecrm-0500'>50</span><span class='ectt-0800'>}</span> |
2561 |
| -<a id='x1-38165r51'></a><span class='ecrm-0500'>51</span> |
2562 |
| -<a id='x1-38167r52'></a><span class='ecrm-0500'>52</span><span id='textcolor1033'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor1034'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit mymodule_exit(</span><span id='textcolor1035'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span> |
2563 |
| -<a id='x1-38169r53'></a><span class='ecrm-0500'>53</span><span class='ectt-0800'>{</span> |
2564 |
| -<a id='x1-38171r54'></a><span class='ecrm-0500'>54</span><span class='ectt-0800'> pr_info(</span><span id='textcolor1036'><span class='ectt-0800'>"mymodule: Exit success</span></span><span id='textcolor1037'><span class='ectt-0800'>\n</span></span><span id='textcolor1038'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>);</span> |
2565 |
| -<a id='x1-38173r55'></a><span class='ecrm-0500'>55</span><span class='ectt-0800'> kobject_put(mymodule);</span> |
2566 |
| -<a id='x1-38175r56'></a><span class='ecrm-0500'>56</span><span class='ectt-0800'>}</span> |
2567 |
| -<a id='x1-38177r57'></a><span class='ecrm-0500'>57</span> |
2568 |
| -<a id='x1-38179r58'></a><span class='ecrm-0500'>58</span><span class='ectt-0800'>module_init(mymodule_init);</span> |
2569 |
| -<a id='x1-38181r59'></a><span class='ecrm-0500'>59</span><span class='ectt-0800'>module_exit(mymodule_exit);</span> |
2570 |
| -<a id='x1-38183r60'></a><span class='ecrm-0500'>60</span> |
2571 |
| -<a id='x1-38185r61'></a><span class='ecrm-0500'>61</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor1039'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span></pre> |
| 2555 | +<a id='x1-38153r45'></a><span class='ecrm-0500'>45</span><span class='ectt-0800'> kobject_put(mymodule);</span> |
| 2556 | +<a id='x1-38155r46'></a><span class='ecrm-0500'>46</span><span class='ectt-0800'> pr_info(</span><span id='textcolor1028'><span class='ectt-0800'>"failed to create the myvariable file "</span></span> |
| 2557 | +<a id='x1-38157r47'></a><span class='ecrm-0500'>47</span><span class='ectt-0800'> </span><span id='textcolor1029'><span class='ectt-0800'>"in /sys/kernel/mymodule</span></span><span id='textcolor1030'><span class='ectt-0800'>\n</span></span><span id='textcolor1031'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>);</span> |
| 2558 | +<a id='x1-38159r48'></a><span class='ecrm-0500'>48</span><span class='ectt-0800'> }</span> |
| 2559 | +<a id='x1-38161r49'></a><span class='ecrm-0500'>49</span> |
| 2560 | +<a id='x1-38163r50'></a><span class='ecrm-0500'>50</span><span class='ectt-0800'> </span><span id='textcolor1032'><span class='ectt-0800'>return</span></span><span class='ectt-0800'> error;</span> |
| 2561 | +<a id='x1-38165r51'></a><span class='ecrm-0500'>51</span><span class='ectt-0800'>}</span> |
| 2562 | +<a id='x1-38167r52'></a><span class='ecrm-0500'>52</span> |
| 2563 | +<a id='x1-38169r53'></a><span class='ecrm-0500'>53</span><span id='textcolor1033'><span class='ectt-0800'>static</span></span><span class='ectt-0800'> </span><span id='textcolor1034'><span class='ectt-0800'>void</span></span><span class='ectt-0800'> __exit mymodule_exit(</span><span id='textcolor1035'><span class='ectt-0800'>void</span></span><span class='ectt-0800'>)</span> |
| 2564 | +<a id='x1-38171r54'></a><span class='ecrm-0500'>54</span><span class='ectt-0800'>{</span> |
| 2565 | +<a id='x1-38173r55'></a><span class='ecrm-0500'>55</span><span class='ectt-0800'> pr_info(</span><span id='textcolor1036'><span class='ectt-0800'>"mymodule: Exit success</span></span><span id='textcolor1037'><span class='ectt-0800'>\n</span></span><span id='textcolor1038'><span class='ectt-0800'>"</span></span><span class='ectt-0800'>);</span> |
| 2566 | +<a id='x1-38175r56'></a><span class='ecrm-0500'>56</span><span class='ectt-0800'> kobject_put(mymodule);</span> |
| 2567 | +<a id='x1-38177r57'></a><span class='ecrm-0500'>57</span><span class='ectt-0800'>}</span> |
| 2568 | +<a id='x1-38179r58'></a><span class='ecrm-0500'>58</span> |
| 2569 | +<a id='x1-38181r59'></a><span class='ecrm-0500'>59</span><span class='ectt-0800'>module_init(mymodule_init);</span> |
| 2570 | +<a id='x1-38183r60'></a><span class='ecrm-0500'>60</span><span class='ectt-0800'>module_exit(mymodule_exit);</span> |
| 2571 | +<a id='x1-38185r61'></a><span class='ecrm-0500'>61</span> |
| 2572 | +<a id='x1-38187r62'></a><span class='ecrm-0500'>62</span><span class='ectt-0800'>MODULE_LICENSE(</span><span id='textcolor1039'><span class='ectt-0800'>"GPL"</span></span><span class='ectt-0800'>);</span></pre> |
2572 | 2573 | <!-- l. 1333 --><p class='indent'> Make and install the module:
|
2573 | 2574 | </p><!-- l. 1 --><p class='indent'>
|
2574 | 2575 | </p>
|
2575 |
| - <pre class='fancyvrb' id='fancyvrb55'><a id='x1-38189r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>make</span> |
2576 |
| -<a id='x1-38191r2'></a><span class='ecrm-0500'>2</span><span class='ectt-1000'>sudo insmod hello-sysfs.ko</span></pre> |
| 2576 | + <pre class='fancyvrb' id='fancyvrb55'><a id='x1-38191r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>make</span> |
| 2577 | +<a id='x1-38193r2'></a><span class='ecrm-0500'>2</span><span class='ectt-1000'>sudo insmod hello-sysfs.ko</span></pre> |
2577 | 2578 | <!-- l. 1340 --><p class='indent'> Check that it exists:
|
2578 | 2579 | </p><!-- l. 1 --><p class='indent'>
|
2579 | 2580 | </p>
|
2580 |
| - <pre class='fancyvrb' id='fancyvrb56'><a id='x1-38194r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo lsmod | grep hello_sysfs</span></pre> |
| 2581 | + <pre class='fancyvrb' id='fancyvrb56'><a id='x1-38196r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo lsmod | grep hello_sysfs</span></pre> |
2581 | 2582 | <!-- l. 1346 --><p class='indent'> What is the current value of <code> <span class='ectt-1000'>myvariable</span>
|
2582 | 2583 | </code> ?
|
2583 | 2584 | </p><!-- l. 1 --><p class='indent'>
|
2584 | 2585 | </p>
|
2585 |
| - <pre class='fancyvrb' id='fancyvrb57'><a id='x1-38198r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo cat /sys/kernel/mymodule/myvariable</span></pre> |
| 2586 | + <pre class='fancyvrb' id='fancyvrb57'><a id='x1-38200r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo cat /sys/kernel/mymodule/myvariable</span></pre> |
2586 | 2587 | <!-- l. 1352 --><p class='indent'> Set the value of <code> <span class='ectt-1000'>myvariable</span>
|
2587 | 2588 | </code> and check that it changed.
|
2588 | 2589 | </p><!-- l. 1 --><p class='indent'>
|
2589 | 2590 | </p>
|
2590 |
| - <pre class='fancyvrb' id='fancyvrb58'><a id='x1-38203r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>echo </span><span id='textcolor1040'><span class='ectt-1000'>"32"</span></span><span class='ectt-1000'> | sudo tee /sys/kernel/mymodule/myvariable</span> |
2591 |
| -<a id='x1-38205r2'></a><span class='ecrm-0500'>2</span><span class='ectt-1000'>sudo cat /sys/kernel/mymodule/myvariable</span></pre> |
| 2591 | + <pre class='fancyvrb' id='fancyvrb58'><a id='x1-38205r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>echo </span><span id='textcolor1040'><span class='ectt-1000'>"32"</span></span><span class='ectt-1000'> | sudo tee /sys/kernel/mymodule/myvariable</span> |
| 2592 | +<a id='x1-38207r2'></a><span class='ecrm-0500'>2</span><span class='ectt-1000'>sudo cat /sys/kernel/mymodule/myvariable</span></pre> |
2592 | 2593 | <!-- l. 1359 --><p class='indent'> Finally, remove the test module:
|
2593 | 2594 | </p><!-- l. 1 --><p class='indent'>
|
2594 | 2595 | </p>
|
2595 |
| - <pre class='fancyvrb' id='fancyvrb59'><a id='x1-38208r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo rmmod hello_sysfs</span></pre> |
| 2596 | + <pre class='fancyvrb' id='fancyvrb59'><a id='x1-38210r1'></a><span class='ecrm-0500'>1</span><span class='ectt-1000'>sudo rmmod hello_sysfs</span></pre> |
2596 | 2597 |
|
2597 | 2598 |
|
2598 | 2599 |
|
|
0 commit comments