Books like these are very good for introducing you to "the essential concepts." But of course, Linux is an ever-changing system.
Therefore, when you get ready to write
your driver, you should download the very latest "kernel source-code" for the Linux that
you intend to target. Then, very carefully work through the source-code directories of existing drivers.
First of all(!), "look to see if someone else has already done it."
If you find that they apparently haven't, select a few drivers that are "closest to" what you now need to build, "carefully tear them apart." (Not literally, of course.)
At
this point, begin to engage with the official "kernel" discussion groups. Tell them what you want to do, and exactly why you think that you need to do it. "Then,
listen."
Find an existing driver that is "very closest to yours," physically copy it, and then "tweak it here or there." (This is an entirely-routine way to begin: you don't have to "start from scratch.") Use the "git" version-control system to prepare a "pull request." Then, engage with the kernel developers to submit your new driver for their consideration.
Very carefully work with them to perfect it. Then, you will join the proud ranks of
"official kernel contributors!"