Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд░реВрде Android рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рд╢рдХреНрддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдВрд╕рд┐рд▓ рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд░рдЦреЗрдВред рдХреМрди рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ - рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред

рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ?

  1. рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рди рд╕реАред
  2. рдЬрд╛рд╡рд╛ рдХрд╛ рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рдиред
  3. рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рддрддреНрд╡ рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рдХреБрдЫ рд╕рдордЭред
  4. Android рдлреЛрди рдЬрдбрд╝ рджрд┐рдпрд╛ред
  5. рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ / рдПрдирдбреАрдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЖрдИрдбреАрдИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧреНрд░рд╣рдг рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдпрд╣ рдХрдИ рдмрд╛рд░ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред
  6. рдПрдХ рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди рдЯреВрд▓рдХрд┐рди рдЬрд┐рд╕рдиреЗ рд▓рдХреНрд╖реНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред
  7. рд╕рд╣реА рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рдЗрдХрдЯреНрдареЗ рдХрд░реНрдиреЗрд▓ред


рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдЙрдмрдВрдЯреВ 11.10 рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдкрд╣рд▓реЗ 3 рдЕрдВрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ 4 рдФрд░ 5 рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЕрдВрддрд┐рдо рджреЛ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрд░реЙрд╕-рд╕рдВрдХрд▓рди рдХрд░реНрдиреЗрд▓ рдореЙрдбреНрдпреВрд▓ (рдбреНрд░рд╛рдЗрд╡рд░) рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓рдЪреЗрди рдЪреБрдирдирд╛

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХрд░реНрдиреЗрд▓ рдХреЛ рдЖрдкрдХреЗ рдлреЛрди рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЪрдордХрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд░реНрдиреЗрд▓ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
cat /proc/version 

рдХрд┐рд╕реА рднреА рдЯрд░реНрдорд┐рдирд▓ рдПрдореБрд▓реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рдЕрджрдм рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
 adb shell "cat /proc/version" 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдорд┐рд▓рддреА рд╣реИ:
 Linux version 3.0.69-g26a847e (blindnumb@iof303) (gcc version 4.7.2 20120701 (prerelease) (Linaro GCC 4.7-2012.07)) #1 PREEMPT Mon Mar 18 12:19:10 MST 2013 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 3.0.69 рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг "-g26a847e" рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдирд░реЛ рдЬреАрд╕реАрд╕реА 4.7-2012.07 рдЯреВрд▓рдХрд┐рди рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдЯреВрд▓рдЪреИрди рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдирдкреИрдХ рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛:
 /home/user/android/android_prebuilt_linux-x86_toolchain_arm-gnueabihf-linaro-4.7 

рдХрд░реНрдиреЗрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд┐рд╕ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдпрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдХрд░, "рдлреЛрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рдирдХрд╛рд░реА


рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдпрд╣ 3.0.69-g26a847e рд╣реИред рдлрд░реНрдорд╡реЗрдпрд░ (рдПрдЪрдЯреАрд╕реА рдбрд┐рдЬрд╛рдпрд░ рдПрд╕ рдХреЗ рд▓рд┐рдП рдкреАрдПрд╕реАрдореИрди) рдХреЗ рдЬреАрдердм рдкрд░ рдереЛрдбрд╝рд╛ рдЦреБрджрд╛рдИ рдХрд░рдХреЗ, рдореИрдВрдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдВрдбреНрд░реЛрдореЗрдбрд╕рдореЙрдб рдХрд╛ рдореВрд▓ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ рдкрд╛рдП рдЧрдП рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдЧрд┐рддреБрдм рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдлреЛрдбрд╝рд╛ рдФрд░ рдПрдХ рдЧрд┐рдЯ рдХреНрд▓реЛрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛, Google рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдФрд░ рдХрд╕реНрдЯрдо рдлрд╝рд░реНрдорд╡реЗрдпрд░ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдУрдкрди рдПрдХреНрд╕реЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдХреБрдЫ рдмрд╕ рдЖрдк рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛:
 /home/user/android/saga-3.0.69 

рдЕрдм рдЖрдкрдХреЛ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдХреЛрд░ рдЗрдХрдЯреНрдард╛ рд╣реБрдЖ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╣реА рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЕрджрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдирдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 adb pull /proc/config.gz . gunzip ./config.gz cp ./config /home/user/android/saga-3.0.69/arch/arm/my_device_defconfig 

рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЙрд╕реА рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реАрдЦрд╛ рдерд╛ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 CONFIG_LOCAL_VERSION="-g26a847e" CONFIG_LOCAL_VESION_AUTO=n 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:
 cd /home/user/android/saga-3.0.69 export ARCH=arm export CROSS_COMPILE=/home/user/android/android_prebuilt_linux-x86_toolchain_arm-gnueabihf-linaro-4.7/bin/arm-eabi- export LOCALVERSION= all make my_device_defconfig make 

рдЕрдм рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЛрдб рд▓реЗрдЦрди

Android рдРрдк

рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рд╕реЗ рдЬреБрдбрд╝реЗ рдХреНрд╖рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╡рд▓ 1 рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реЛрдЧреА:
activity_main.xml
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/btnText1" android:onClick="onClick"/> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/button1" android:layout_marginTop="42dp" android:ems="10" android:textSize="16sp" android:inputType="textMultiLine" /> </RelativeLayout> 


рдпрд╣ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдмрдЯрди рдкрд░, рд╣рдо рдПрдХ рдШрдЯрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕реЗ рдкрд╛рда рдмреЙрдХреНрд╕ рдореЗрдВ рд▓рд┐рдЦ рджреЗрдЧреА:
рдореБрдЦреНрдпрддрд╛ рд╡рд░реНрдЧ
 public class MainActivity extends Activity { private EditText text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (EditText)findViewById(R.id.editText1); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void onClick(View view) { switch (view.getId()) { case R.id.button1: text.setText(IoctlWrapper.getData()); } } } 


рдЕрдм рд╣рдорд╛рд░реА jini рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд░реИрдкрд░ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ:
 public class IoctlWrapper { public static native String getKData(); //   ,      public static String getData() { return getKData(); } static { System.loadLibrary("ioctlwrap"); } } 

JNI

рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ jni рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред
рдЕрдЧрд▓рд╛, рд╣рдо рдЕрдкрдиреЗ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реА рд╣реЗрдбрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ:
 cd src javac -d /tmp/ com/propheta13/amoduse/IoctlWrapper.java cd /tmp javah -jni com.propheta13.amoduse.IoctlWrapper 

рд╣рдо рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реА .c рдФрд░ Android.mk рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ:
 cd [PATH TO ANDROIDPROJ]/jni cp /tmp/com_propheta13_amoduse_IoctlWrapper.h ./ioctlwrap.h touch ./ioctlwrap.c touch ./Android.mk 

Android.mk рд╕рд╛рдордЧреНрд░реА:
 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ioctlwrap LOCAL_SRC_FILES := ioctlwrap.c 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
  1. рдбреНрд░рд╛рдЗрд╡рд░ рдиреЛрдб рдЦреЛрд▓реЗрдВред
  2. рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ
  3. Ioctl рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  4. рдиреЛрдб рдмрдВрдж рдХрд░реЗрдВред
  5. рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЬрд╛рд╡рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рд░реИрдкрд░ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВред

рдкреВрд░реНрдг рдХреЛрдб:
ioctlwrap.c
 const char string[] = "Driver open failed."; #define BUF_SIZE 4096 JNIEXPORT jstring JNICALL Java_com_propheta13_amoduse_IoctlWrapper_getKData (JNIEnv *env, jclass jcl) { char *info_buf = NULL; int dfd = 0, rc = 0; dfd = open(TKMOD_DEV_PATH, O_RDONLY); if(dfd < 0) { jstring RetString = (*env)->NewStringUTF(env, string); goto exit; } info_buf = malloc(BUF_SIZE); rc = ioctl(dfd, TKMOD_IOCTL_GET_DATA, info_buf); if(rc < 0) { strerror_r(rc, info_buf, BUF_SIZE); } jstring RetString = (*env)->NewStringUTF(env, info_buf); free(info_buf); close(dfd); exit: return RetString; } 


рдХрд░реНрдиреЗрд▓ рдЪрд╛рд▓рдХ

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдиреЛрдЯреНрд╕ рдмрдирд╛рдКрдВрдЧрд╛:
  1. рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рдЕрд▓реМрдХрд┐рдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
  2. рдЪрд╛рд▓рдХ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ioctl рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдмрд┐рд▓реНрдб рдореЗрдХрдлрд╛рдЗрд▓ рдЖрдкрдХреЛ рдЙрд╕ рдХрд░реНрдиреЗрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 make KMODDIR=[path to kernel] 

рд▓рд╛рдВрдЪ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЗрдХрдЯреНрдареЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рднрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЙрд╕реА рд╕рдордп рдбреНрд░рд╛рдЗрд╡рд░ рдиреЛрдб рдХреЛ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрд░реЗрдВ:
 adb push ./test_kmod.ko /data/local/tmp root@android:/ # rmmod test_kmod root@android:/ # insmod /data/local/tmp/test_kmod.ko root@android:/ # chmod 777 /dev/tkmod_device 

рдпрджрд┐ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд░реНрдиреЗрд▓ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реАрдзреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧреНрд░рд╣рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдмрдЯрди рджрдмрд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

рдХрд░реНрдиреЗрд▓ рд▓реЙрдЧ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 root@android:/ # dmesg | grep [TEST_KMOD] #        . 

рдХрд░реНрдиреЗрд▓ рд▓реЙрдЧ
 <6>[ 8695.448028] [TEST_KMOD] == Module init == <7>[ 8775.583587] [TEST_KMOD] tkmod opened. Descriptor: 0xc2e98e00. <7>[ 8775.583770] [TEST_KMOD] TKMOD_IOCTL_GET_DATA request. <6>[ 8775.583923] [TEST_KMOD] name = lo <6>[ 8775.584167] [TEST_KMOD] name = dummy0 <6>[ 8775.584259] [TEST_KMOD] name = rmnet0 <6>[ 8775.584320] [TEST_KMOD] name = rmnet1 <6>[ 8775.584503] [TEST_KMOD] name = rmnet2 <6>[ 8775.584564] [TEST_KMOD] name = rmnet3 <6>[ 8775.584655] [TEST_KMOD] name = rmnet4 <6>[ 8775.584777] [TEST_KMOD] name = rmnet5 <6>[ 8775.584930] [TEST_KMOD] name = rmnet6 <6>[ 8775.585021] [TEST_KMOD] name = rmnet7 <6>[ 8775.585113] [TEST_KMOD] name = gre0 <6>[ 8775.585266] [TEST_KMOD] name = sit0 <6>[ 8775.585357] [TEST_KMOD] name = ip6tnl0 <7>[ 8775.585479] [TEST_KMOD] tkmod_ 0xc2e98e00 closed successfuly. 


рдирд┐рд╖реНрдХрд░реНрд╖

рдЗрд╕ рд╕реНрдирд╛рдпреБрдмрдВрдзрди рдХрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВ рд╣реИред рдХрд░реНрдиреЗрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдХрд┐рд╕реА рднреА рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдВрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЖрдкрдХреЛ рдРрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдПрдкреАрдЖрдИ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдПрдХ рдкреВрд░реЗ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рдкреАрдЫреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧрд╣рд░реЗ рдЫрд┐рдкреЗ рд╣реБрдП рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдЬреЛ рдЖрдкрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рд╕реАрдзреЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдореЛрд░реА рдмрдлрд░ рдореЗрдВ рд▓рд┐рдЦ рджреЗрдЧрд╛ред рдбрд┐рд╡рд╛рдЗрд╕ред рдпрд╣ рд╕рдорд╛рдзрд╛рди рди рдХреЗрд╡рд▓ рдлреЛрди рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реИред
рдкреВрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рд╣реИ ред
рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди:

1. developer.android.com - Android SDK / NDK рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
2. www.vogella.com - Android рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓реЗрдЦред
3. blog.edwards-research.com/2012/04/tutorial-android-jni - JNI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ ред
4. docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html - рдЬреЗрдПрдирдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рд╕рдВрджрд░реНрдн рд╕рд╛рдордЧреНрд░реАред
5. рд▓рд┐рдирдХреНрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░, 3ed - рдмрд╛рдЗрдмрд┐рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ред
рдпреБрдкреАрдбреА

рдХреЛрдб рдореЗрдВ рдХрдИ рдЯрд╛рдЗрдкреЛ, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред рд╕рд╛рднрд╛рд░ : bmx666 , Shirixae


Source: https://habr.com/ru/post/In174077/


All Articles