Самый простой подход должен был бы использовать tee
вывести вход к и произвести от ребенка в два отдельных файла как так:
#!/bin/bash
tee in.log | child | tee out.log
Вы могли использовать tee
-a
параметр (добавляет) для записи обоих журналов в тот же файл, но я не совсем уверен, будут ли они чередованы в правильном порядке или просто записаны один за другим:
#!/bin/bash
tee -a both.log | child | tee -a both.log
Нет. Ядро специально разработано, чтобы запретить запуск кода пользовательского режима в кольцевом 0.
Для этого вам нужно будет написать модуль ядра, а затем пообщаться с вашим модулем каким-нибудь методом (возможно ioctl
) из вашей программы пользовательского режима.
Для написания модуля ядра не требуется заплатка ядра, но модуль ядра должен быть написан очень аккуратно. Лучше всего начать с примера модуля, который делает что-то подобное, и модифицировать его под свои нужды.
Вот довольно хорошее руководство для начала; http://www.thegeekstuff.com/2013/07/write-linux-kernel-module/
Makefile у меня не работал (ничего не нужно делать для «всех»), а просто выполнялся команда make ядра работает напрямую;
user@gauss:~/a$ make -C /lib/modules/$(uname -r)/build M=$PWD modules
make: Entering directory `/usr/src/linux-headers-3.13.0-29-generic'
CC [M] /home/user/a/hello.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/user/a/hello.mod.o
LD [M] /home/user/a/hello.ko
make: Leaving directory `/usr/src/linux-headers-3.13.0-29-generic'