Current location - Education and Training Encyclopedia - Resume - What is the development prospect of Linux kernel and driver development engineers?
What is the development prospect of Linux kernel and driver development engineers?
At present, the development prospects of Linux kernel and driver development engineers mainly include the following points:

Engaged in embedded development is a hot field at present. In career planning, there are obviously three ways to go:

C 1, embedded software development engineer

C2。 Embedded hardware development engineer

C3。 Embedded driver development engineer.

In ...

C 1 is a choice for students majoring in computer science, because the courses they study are soft and there are many programs on the PC at ordinary times, so it will be relatively easy to do software development.

C2 is considered by students studying electronic circuits. They are familiar with analog circuits and can design high-quality circuit boards.

C3 is more difficult, so we need to be familiar with both software and hardware, truly combine software and hardware, and build a bridge between software and hardware. Of course, the treatment in the industry is still relatively high.

We can go to some recruitment websites to check the job requirements of related enterprises, so that we can have a clear goal when studying. Today, I saw a senior's blog post about how to become an excellent driver development engineer. I am very encouraged and would like to share it with you.

What is an excellent driver development engineer?

First of all, we should make clear what kind of ability I think an excellent driver development engineer should have. The following is a list of requirements from easy to difficult. Personally, I think there should be several requirements:

Able to independently complete the driven function development tasks.

Be able to analyze and optimize the performance of drivers, and foster strengths and avoid weaknesses for specific hardware.

Be able to fully understand the related software and hardware capabilities and development direction of the module, and assist application engineers to maximize the use of hardware capabilities.

It can assist hardware engineers to plan hardware design, prevent problems and seek the best scheme of functional modules.

It can help to define system architecture, rationally plan software and hardware, and seek the best solution for product realization.

As a driver engineer, I often don't develop a complete subsystem from scratch, but transplant drivers for specific hardware and platforms, increase functions, and solve bugs. If I look at the external performance in this respect:

To solve this problem, there are probably several stages:

I don't know where the bug is.

I don't know how to solve this problem.

Know how to solve bugs

Know how to find bugs

Know how to design bugs

Knowing how to find bugs (rather than bumping into them) is not easy. You need to know enough about the system so that you can find possible problems.

It is more difficult to plan bugs, and it is necessary to make an accurate judgment on the priority of the problem. There is no perfect world, only proper choice, avoidance and prevention.

Judging from the process of solving problems, I think it can be divided into several stages:

BUG occurrence-> A lot of trace debugging code->; Finally found and solved this BUG.

BUG occurrence-> Theoretical speculation on possible reasons->; Quickly locate and solve bugs

Read code->; Predict possible BUG-& gt;; Verify and resolve errors.

What qualities should you have?

So what qualities and abilities do you need to have and develop to achieve the best appeal?

First, sufficient hardware knowledge.

Being able to read a simple schematic diagram, analyze the possible causes of hardware anomalies, and use common hardware debugging tools, I think this is an inevitable and necessary professional quality for an excellent driver engineer to be different from other software engineers. Of course, it depends on your specific work, and the requirements in this respect are different.

For driver developers, if they don't understand the hardware principle and related background knowledge of the developed driver peripherals, they may be able to complete some tasks of transplanting and repairing in many cases, but this is like water without a source, and I believe it is difficult to go far.

Second, the more knowledge of the operating system, the better.

Driver development, especially pure peripheral driver transplantation, may not need to know much about the operating system itself (such as memory management, process scheduling, locking, the principle framework of various kernel subsystems, etc.) at the beginning. ), and can successfully complete some work at hand.

But if the driver needs to be optimized, the software framework needs to be improved, or difficult problems need to be tracked and solved, then the understanding of the operating system and the kernel itself will reflect its value.

This is especially true for Linux kernel driver developers. First of all, the code is completely open source, and you can understand the operating mechanism behind it. Secondly, the Linux kernel and its subsystems are always in rapid evolution and development, so it is necessary for you to keep up with the times.

Third, strong curiosity and persistent enthusiasm.

If driving development is not only your hobby, but also your way to support your family, I think, in many cases, you probably won't have the opportunity to focus on the development and maintenance of one or two modules with your most experience. With the growth of ability, you will be required to contact and master more and more development of various driver modules.

For this matter, including myself, sometimes I will probably have the following reactions:

Wow, the old job was too long and boring. I'm glad to do a different job.

Huh? Do you want to make other modules? I have too much work at hand!

This module is boring and I don't want to do it.

I believe that most aspiring young people are the first to show enthusiasm. However, sometimes, I find that many people's enthusiasm is not lasting. After a new module was not made for a long time, they got tired of it again. Is it finished? Not necessarily, maybe it's just that they have modified a few bugs, so it's not without a chat. Many times, when I interviewed the engineers who came to apply, I found that my resume said that I had done this and that, but once I was asked what problems I had solved, what drivers, frameworks, processes and principles I had done, I was puzzled.

I think if my goal is to be excellent, then the minimum standard should be the overall workflow and framework of the subsystems related to the specific driver module, and I should be curious enough to understand and learn, not just to work to complete the task, otherwise it will be difficult to accumulate solid experience and technology.

Fourth, clear logical thinking ability.

Maybe a software developer should have this. But as a driver development engineer, sometimes, in most cases, the working hardware environment is not perfect. When encountering a problem, it is necessary to analyze and determine whether the cause of the error is a hardware problem or a driver Bug. At this time, clear logical thinking ability is particularly important.

Five, good work habits

Most people are not geniuses. To be an excellent development engineer, one needs continuous efforts, and the other needs time to accumulate experience. In this process, good work habits are very important. For example, pay attention to the maintenance of design documents, record the problems encountered in the work, record the past experience in time, and the appropriate software development process. Many people may not want to do the document work, which is really time-consuming. But, alas. . . When you are old, a good memory is not as good as a bad writing.

. Of course, in fact, the design document is more to provide you with an opportunity to think, and the summary of past experience can also serve the purpose of exchanging technology with you and making progress together.

Six, English

This is also necessary, there is no way, mailing list, technical documents, community, proficient in English is definitely a great advantage, especially for open source projects. The speed of reading various Spec standard documents is still very important. Accessibility to reading is one thing, and it is refreshing to be able to read as fast as your mother tongue. Alas, life is short and efficient! Just reading documents, you don't know how much more time it takes than foreigners.