Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Когда я взял вышеупомянутый студенческий курс ОС, состояла в том, чтобы добавить одна из наших задач несколько syscalls. Они были чрезвычайно просты, только читая и сбрасывая счетчики, которые считали количество раз, другие syscalls были вызваны. Однако добавление syscall требует взгляда на и изменения довольно многих файлов.. многие из них находятся в том же относительно маленьком поддереве источника ядра, но достаточно для получения Вас знакомый с конвенциями кодирования, по крайней мере.
Вы могли бы также рассмотреть:
Добавление другого (очень простого) режима к планировщику для проведения политики Вы находите интересными. "Одна реализация для управления их всех" довольно трудна (и еще тяжелее договариваться), но выполнение простого O (N) планировщик, даже элементарный O (1) планировщик, может быть сделано относительно просто, алгоритмически говоря. Несмотря на это, это требует ввода по абсолютному адресу через большое количество кода.
Запись драйвера устройства для очень простой части внешнего оборудования, как 8-разрядный микроконтроллер, который связывается через сериал или даже что-то, которое Вы создаете себя. Если у Вас есть аппаратный опыт, возможно, попытайтесь записать драйвер устройства, который может эмулировать контроллер NES (разрядный удар несколько проводов с помощью последовательного порта и возможно последовательно-параллельного сдвигового регистра). Вы могли также сделать что-то как управление действительно простым светодиодным дисплеем с 7 сегментами (как Вы, имеют в будильнике), или небольшая коллекция их.
Рискуя тем, чтобы запустить войну пламени: я рекомендовал бы Вам избегать кода ядра Linux. Если Вы хотите пачкать руки с программированием ядра, пойдите с FreeBSD, NetBSD или OpenSolaris, например. Код является намного более чистым и лучше структурирован (это - конечно, субъективное мнение), на самом деле разработанный и даже зарегистрированный. Плюс у них есть отладчик ядра (обратите внимание, что Linus против обоих отладчиков ядра и стабильного API ядра, который делает любое ядро движущейся целью для Вашей работы). Эти Ose даже имеют список проектов на их соответствующих веб-сайтах, и у меня лично есть чрезвычайно хороший опыт с людьми на форумах OpenSolaris и списках рассылки NetBSD.
Вы говорите, что у Вас есть опыт с C - смотрят на веб-репозитории исходного кода Linux и OpenSolaris или некоторые BSDs, сравнивают код и делают Ваше собственное мнение. То, что я говорю, я предполагаю, что существует больше к UNIX с открытым исходным кодом, чем Linux, и что необходимо, по крайней мере, посмотреть на них прежде, чем идти для Linux.