linux/Documentation/zh_CN/arm/kernel_user_helpers.txt
<<
>>
Prefs
   1Chinese translated version of Documentation/arm/kernel_user_helpers.txt
   2
   3If you have any comment or update to the content, please contact the
   4original document maintainer directly.  However, if you have a problem
   5communicating in English you can also ask the Chinese maintainer for
   6help.  Contact the Chinese maintainer if this translation is outdated
   7or if there is a problem with the translation.
   8
   9Maintainer: Nicolas Pitre <nicolas.pitre@linaro.org>
  10                Dave Martin <dave.martin@linaro.org>
  11Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
  12---------------------------------------------------------------------
  13Documentation/arm/kernel_user_helpers.txt \xE7\x9A\x84\xE4\xB8\xAD\xE6\x96\x87\xE7\xBF\xBB\xE8\xAF\x91
  14
  15\xE5\xA6\x82\xE6\x9E\x9C\xE6\x83\xB3\xE8\xAF\x84\xE8\xAE\xBA\xE6\x88\x96\xE6\x9B\xB4\xE6\x96\xB0\xE6\x9C\xAC\xE6\x96\x87\xE7\x9A\x84\xE5\x86\x85\xE5\xAE\xB9\xEF\xBC\x8C\xE8\xAF\xB7\xE7\x9B\xB4\xE6\x8E\xA5\xE8\x81\x94\xE7\xB3\xBB\xE5\x8E\x9F\xE6\x96\x87\xE6\xA1\xA3\xE7\x9A\x84\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8B\xB1\xE6\x96\x87
  16\xE4\xBA\xA4\xE6\xB5\x81\xE6\x9C\x89\xE5\x9B\xB0\xE9\x9A\xBE\xE7\x9A\x84\xE8\xAF\x9D\xEF\xBC\x8C\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x90\x91\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE6\xB1\x82\xE5\x8A\xA9\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE6\x9C\xAC\xE7\xBF\xBB\xE8\xAF\x91\xE6\x9B\xB4\xE6\x96\xB0\xE4\xB8\x8D\xE5\x8F\x8A\xE6\x97\xB6\xE6\x88\x96\xE8\x80\x85\xE7\xBF\xBB
  17\xE8\xAF\x91\xE5\xAD\x98\xE5\x9C\xA8\xE9\x97\xAE\xE9\xA2\x98\xEF\xBC\x8C\xE8\xAF\xB7\xE8\x81\x94\xE7\xB3\xBB\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82
  18\xE8\x8B\xB1\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A Nicolas Pitre <nicolas.pitre@linaro.org>
  19                Dave Martin <dave.martin@linaro.org>
  20\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  21\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBF\xBB\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  22\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE6\xA0\xA1\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\xAE\x8B\xE5\x86\xAC\xE7\x94\x9F Dongsheng Song <dongshneg.song@gmail.com>
  23                \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  24
  25
  26\xE4\xBB\xA5\xE4\xB8\x8B\xE4\xB8\xBA\xE6\xAD\xA3\xE6\x96\x87
  27---------------------------------------------------------------------
  28\xE5\x86\x85\xE6\xA0\xB8\xE6\x8F\x90\xE4\xBE\x9B\xE7\x9A\x84\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81
  29=========================
  30
  31\xE5\x9C\xA8\xE5\x86\x85\xE6\xA0\xB8\xE5\x86\x85\xE5\xAD\x98\xE7\xA9\xBA\xE9\x97\xB4\xE7\x9A\x84\xE5\x9B\xBA\xE5\xAE\x9A\xE5\x9C\xB0\xE5\x9D\x80\xE5\xA4\x84\xEF\xBC\x8C\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE7\x94\xB1\xE5\x86\x85\xE6\xA0\xB8\xE6\x8F\x90\xE4\xBE\x9B\xE5\xB9\xB6\xE5\x8F\xAF\xE4\xBB\x8E\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE8\xAE\xBF\xE9\x97\xAE\xE7\x9A\x84\xE4\xBB\xA3\xE7\xA0\x81
  32\xE6\xAE\xB5\xE3\x80\x82\xE5\xAE\x83\xE7\x94\xA8\xE4\xBA\x8E\xE5\x90\x91\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE6\x8F\x90\xE4\xBE\x9B\xE5\x9B\xA0\xE5\x9C\xA8\xE8\xAE\xB8\xE5\xA4\x9A ARM CPU \xE4\xB8\xAD\xE6\x9C\xAA\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84\xE7\x89\xB9\xE6\x80\xA7\xE5\x92\x8C/\xE6\x88\x96\xE6\x8C\x87\xE4\xBB\xA4\xE8\x80\x8C\xE9\x9C\x80
  33\xE5\x86\x85\xE6\xA0\xB8\xE6\x8F\x90\xE4\xBE\x9B\xE5\xB8\xAE\xE5\x8A\xA9\xE7\x9A\x84\xE6\x9F\x90\xE4\xBA\x9B\xE6\x93\x8D\xE4\xBD\x9C\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE4\xBB\xA3\xE7\xA0\x81\xE7\x9B\xB4\xE6\x8E\xA5\xE5\x9C\xA8\xE7\x94\xA8\xE6\x88\xB7\xE6\xA8\xA1\xE5\xBC\x8F\xE4\xB8\x8B\xE6\x89\xA7\xE8\xA1\x8C\xE7\x9A\x84\xE6\x83\xB3\xE6\xB3\x95\xE6\x98\xAF\xE4\xB8\xBA\xE4\xBA\x86\xE8\x8E\xB7\xE5\xBE\x97
  34\xE6\x9C\x80\xE4\xBD\xB3\xE6\x95\x88\xE7\x8E\x87\xEF\xBC\x8C\xE4\xBD\x86\xE9\x82\xA3\xE4\xBA\x9B\xE4\xB8\x8E\xE5\x86\x85\xE6\xA0\xB8\xE8\xAE\xA1\xE6\x95\xB0\xE5\x99\xA8\xE8\x81\x94\xE7\xB3\xBB\xE8\xBF\x87\xE4\xBA\x8E\xE7\xB4\xA7\xE5\xAF\x86\xE7\x9A\x84\xE9\x83\xA8\xE5\x88\x86\xEF\xBC\x8C\xE5\x88\x99\xE8\xA2\xAB\xE7\x95\x99\xE7\xBB\x99\xE4\xBA\x86\xE7\x94\xA8\xE6\x88\xB7\xE5\xBA\x93\xE5\xAE\x9E\xE7\x8E\xB0\xE3\x80\x82
  35\xE4\xBA\x8B\xE5\xAE\x9E\xE4\xB8\x8A\xEF\xBC\x8C\xE6\xAD\xA4\xE4\xBB\xA3\xE7\xA0\x81\xE7\x94\x9A\xE8\x87\xB3\xE5\x8F\xAF\xE8\x83\xBD\xE5\x9B\xA0\xE4\xB8\x8D\xE5\x90\x8C\xE7\x9A\x84 CPU \xE8\x80\x8C\xE5\xBC\x82\xEF\xBC\x8C\xE8\xBF\x99\xE5\x8F\x96\xE5\x86\xB3\xE4\xBA\x8E\xE5\x85\xB6\xE5\x8F\xAF\xE7\x94\xA8\xE7\x9A\x84\xE6\x8C\x87\xE4\xBB\xA4\xE9\x9B\x86\xE6\x88\x96\xE5\xAE\x83
  36\xE6\x98\xAF\xE5\x90\xA6\xE4\xB8\xBA SMP \xE7\xB3\xBB\xE7\xBB\x9F\xE3\x80\x82\xE6\x8D\xA2\xE5\x8F\xA5\xE8\xAF\x9D\xE8\xAF\xB4\xEF\xBC\x8C\xE5\x86\x85\xE6\xA0\xB8\xE4\xBF\x9D\xE7\x95\x99\xE5\x9C\xA8\xE4\xB8\x8D\xE4\xBD\x9C\xE5\x87\xBA\xE8\xAD\xA6\xE5\x91\x8A\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE6\xA0\xB9\xE6\x8D\xAE\xE9\x9C\x80\xE8\xA6\x81\xE6\x9B\xB4\xE6\x94\xB9
  37\xE8\xBF\x99\xE4\xBA\x9B\xE4\xBB\xA3\xE7\xA0\x81\xE7\x9A\x84\xE6\x9D\x83\xE5\x88\xA9\xE3\x80\x82\xE5\x8F\xAA\xE6\x9C\x89\xE6\x9C\xAC\xE6\x96\x87\xE6\xA1\xA3\xE6\x8F\x8F\xE8\xBF\xB0\xE7\x9A\x84\xE5\x85\xA5\xE5\x8F\xA3\xE5\x8F\x8A\xE5\x85\xB6\xE7\xBB\x93\xE6\x9E\x9C\xE6\x98\xAF\xE4\xBF\x9D\xE8\xAF\x81\xE7\xA8\xB3\xE5\xAE\x9A\xE7\x9A\x84\xE3\x80\x82
  38
  39\xE8\xBF\x99\xE4\xB8\x8E\xE5\xAE\x8C\xE5\x85\xA8\xE6\x88\x90\xE7\x86\x9F\xE7\x9A\x84 VDSO \xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB8\x8D\xE5\x90\x8C\xEF\xBC\x88\xE4\xBD\x86\xE4\xB8\xA4\xE8\x80\x85\xE5\xB9\xB6\xE4\xB8\x8D\xE5\x86\xB2\xE7\xAA\x81\xEF\xBC\x89\xEF\xBC\x8C\xE5\xB0\xBD\xE7\xAE\xA1\xE5\xA6\x82\xE6\xAD\xA4\xEF\xBC\x8CVDSO \xE5\x8F\xAF\xE9\x98\xBB\xE6\xAD\xA2
  40\xE6\x9F\x90\xE4\xBA\x9B\xE9\x80\x9A\xE8\xBF\x87\xE5\xB8\xB8\xE9\x87\x8F\xE9\xAB\x98\xE6\x95\x88\xE8\xB7\xB3\xE8\xBD\xAC\xE5\x88\xB0\xE9\x82\xA3\xE4\xBA\x9B\xE4\xBB\xA3\xE7\xA0\x81\xE6\xAE\xB5\xE7\x9A\x84\xE6\xB1\x87\xE7\xBC\x96\xE6\x8A\x80\xE5\xB7\xA7\xE3\x80\x82\xE4\xB8\x94\xE7\x94\xB1\xE4\xBA\x8E\xE9\x82\xA3\xE4\xBA\x9B\xE4\xBB\xA3\xE7\xA0\x81\xE6\xAE\xB5\xE5\x9C\xA8\xE8\xBF\x94\xE5\x9B\x9E\xE7\x94\xA8\xE6\x88\xB7
  41\xE4\xBB\xA3\xE7\xA0\x81\xE5\x89\x8D\xE4\xBB\x85\xE4\xBD\xBF\xE7\x94\xA8\xE5\xB0\x91\xE9\x87\x8F\xE7\x9A\x84\xE4\xBB\xA3\xE7\xA0\x81\xE5\x91\xA8\xE6\x9C\x9F\xEF\xBC\x8C\xE5\x88\x99\xE4\xB8\x80\xE4\xB8\xAA VDSO \xE9\x97\xB4\xE6\x8E\xA5\xE8\xBF\x9C\xE7\xA8\x8B\xE8\xB0\x83\xE7\x94\xA8\xE5\xB0\x86\xE4\xBC\x9A\xE5\x9C\xA8\xE8\xBF\x99\xE4\xBA\x9B\xE7\xAE\x80\xE5\x8D\x95\xE7\x9A\x84
  42\xE6\x93\x8D\xE4\xBD\x9C\xE4\xB8\x8A\xE5\xA2\x9E\xE5\x8A\xA0\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8F\xAF\xE6\xB5\x8B\xE9\x87\x8F\xE7\x9A\x84\xE5\xBC\x80\xE9\x94\x80\xE3\x80\x82
  43
  44\xE5\x9C\xA8\xE5\xAF\xB9\xE9\x82\xA3\xE4\xBA\x9B\xE6\x8B\xA5\xE6\x9C\x89\xE5\x8E\x9F\xE7\x94\x9F\xE6\x94\xAF\xE6\x8C\x81\xE7\x9A\x84\xE6\x96\xB0\xE5\x9E\x8B\xE5\xA4\x84\xE7\x90\x86\xE5\x99\xA8\xE8\xBF\x9B\xE8\xA1\x8C\xE4\xBB\xA3\xE7\xA0\x81\xE4\xBC\x98\xE5\x8C\x96\xE6\x97\xB6\xEF\xBC\x8C\xE4\xBB\x85\xE5\x9C\xA8\xE5\xB7\xB2\xE4\xB8\xBA\xE5\x85\xB6\xE4\xBB\x96\xE6\x93\x8D\xE4\xBD\x9C\xE4\xBD\xBF\xE7\x94\xA8
  45\xE4\xBA\x86\xE7\xB1\xBB\xE4\xBC\xBC\xE7\x9A\x84\xE6\x96\xB0\xE5\xA2\x9E\xE6\x8C\x87\xE4\xBB\xA4\xEF\xBC\x8C\xE8\x80\x8C\xE5\xAF\xBC\xE8\x87\xB4\xE4\xBA\x8C\xE8\xBF\x9B\xE5\x88\xB6\xE7\xBB\x93\xE6\x9E\x9C\xE5\xB7\xB2\xE4\xB8\x8E\xE6\x97\xA9\xE6\x9C\x9F ARM \xE5\xA4\x84\xE7\x90\x86\xE5\x99\xA8\xE4\xB8\x8D\xE5\x85\xBC\xE5\xAE\xB9\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C
  46\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE6\x89\x8D\xE5\xBA\x94\xE7\xBB\x95\xE8\xBF\x87\xE8\xBF\x99\xE4\xBA\x9B\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x9C\xA8\xE5\x86\x85\xE8\x81\x94\xE5\x87\xBD\xE6\x95\xB0\xE4\xB8\xAD\xE5\xAE\x9E\xE7\x8E\xB0\xE8\xBF\x99\xE4\xBA\x9B\xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x88\xE6\x97\xA0\xE8\xAE\xBA\xE6\x98\xAF\xE9\x80\x9A\xE8\xBF\x87
  47\xE7\xBC\x96\xE8\xAF\x91\xE5\x99\xA8\xE5\x9C\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE4\xB8\xAD\xE7\x9B\xB4\xE6\x8E\xA5\xE6\x94\xBE\xE7\xBD\xAE\xEF\xBC\x8C\xE8\xBF\x98\xE6\x98\xAF\xE4\xBD\x9C\xE4\xB8\xBA\xE5\xBA\x93\xE5\x87\xBD\xE6\x95\xB0\xE8\xB0\x83\xE7\x94\xA8\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84\xE4\xB8\x80\xE9\x83\xA8\xE5\x88\x86\xEF\xBC\x89\xE3\x80\x82\xE4\xB9\x9F\xE5\xB0\xB1\xE6\x98\xAF\xE8\xAF\xB4\xEF\xBC\x8C
  48\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE7\xBC\x96\xE8\xAF\x91\xE7\x9A\x84\xE4\xBB\xA3\xE7\xA0\x81\xE4\xB8\x8D\xE4\xBC\x9A\xE4\xB8\xBA\xE4\xBA\x86\xE5\x85\xB6\xE4\xBB\x96\xE7\x9B\xAE\xE7\x9A\x84\xE4\xBD\xBF\xE7\x94\xA8\xE6\x96\xB0\xE6\x8C\x87\xE4\xBB\xA4\xEF\xBC\x8C\xE5\x88\x99\xE4\xB8\x8D\xE8\xA6\x81\xE4\xBB\x85\xE4\xB8\xBA\xE4\xBA\x86\xE9\x81\xBF\xE5\x85\x8D\xE4\xBD\xBF\xE7\x94\xA8\xE8\xBF\x99\xE4\xBA\x9B
  49\xE5\x86\x85\xE6\xA0\xB8\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xEF\xBC\x8C\xE5\xAF\xBC\xE8\x87\xB4\xE4\xBA\x8C\xE8\xBF\x9B\xE5\x88\xB6\xE7\xA8\x8B\xE5\xBA\x8F\xE6\x97\xA0\xE6\xB3\x95\xE5\x9C\xA8\xE6\x97\xA9\xE6\x9C\x9F\xE5\xA4\x84\xE7\x90\x86\xE5\x99\xA8\xE4\xB8\x8A\xE8\xBF\x90\xE8\xA1\x8C\xE3\x80\x82
  50
  51\xE6\x96\xB0\xE7\x9A\x84\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\x8F\xAF\xE8\x83\xBD\xE9\x9A\x8F\xE7\x9D\x80\xE6\x97\xB6\xE9\x97\xB4\xE7\x9A\x84\xE6\x8E\xA8\xE7\xA7\xBB\xE8\x80\x8C\xE5\xA2\x9E\xE5\x8A\xA0\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE6\x96\xB0\xE5\x86\x85\xE6\xA0\xB8\xE4\xB8\xAD\xE7\x9A\x84\xE6\x9F\x90\xE4\xBA\x9B\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\x9C\xA8\xE6\x97\xA7
  52\xE5\x86\x85\xE6\xA0\xB8\xE4\xB8\xAD\xE5\x8F\xAF\xE8\x83\xBD\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE3\x80\x82\xE5\x9B\xA0\xE6\xAD\xA4\xEF\xBC\x8C\xE7\xA8\x8B\xE5\xBA\x8F\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8\xE5\xAF\xB9\xE4\xBB\xBB\xE4\xBD\x95\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE8\xB0\x83\xE7\x94\xA8\xE5\x81\x87\xE8\xAE\xBE\xE6\x98\xAF\xE5\xAE\x89\xE5\x85\xA8\xE4\xB9\x8B\xE5\x89\x8D\xEF\xBC\x8C
  53\xE6\xA3\x80\xE6\xB5\x8B __kuser_helper_version \xE7\x9A\x84\xE5\x80\xBC\xEF\xBC\x88\xE8\xA7\x81\xE4\xB8\x8B\xE6\x96\x87\xEF\xBC\x89\xE3\x80\x82\xE7\x90\x86\xE6\x83\xB3\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xEF\xBC\x8C\xE8\xBF\x99\xE7\xA7\x8D\xE6\xA3\x80\xE6\xB5\x8B\xE5\xBA\x94\xE8\xAF\xA5
  54\xE5\x8F\xAA\xE5\x9C\xA8\xE8\xBF\x9B\xE7\xA8\x8B\xE5\x90\xAF\xE5\x8A\xA8\xE6\x97\xB6\xE6\x89\xA7\xE8\xA1\x8C\xE4\xB8\x80\xE6\xAC\xA1\xEF\xBC\x9B\xE5\xA6\x82\xE6\x9E\x9C\xE5\x86\x85\xE6\xA0\xB8\xE7\x89\x88\xE6\x9C\xAC\xE4\xB8\x8D\xE6\x94\xAF\xE6\x8C\x81\xE6\x89\x80\xE9\x9C\x80\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xEF\xBC\x8C\xE5\x88\x99\xE8\xAF\xA5\xE8\xBF\x9B\xE7\xA8\x8B\xE5\x8F\xAF\xE5\xB0\xBD\xE6\x97\xA9
  55\xE4\xB8\xAD\xE6\xAD\xA2\xE6\x89\xA7\xE8\xA1\x8C\xE3\x80\x82
  56
  57kuser_helper_version
  58--------------------
  59
  60\xE4\xBD\x8D\xE7\xBD\xAE:       0xffff0ffc
  61
  62\xE5\x8F\x82\xE8\x80\x83\xE5\xA3\xB0\xE6\x98\x8E:
  63
  64  extern int32_t __kuser_helper_version;
  65
  66\xE5\xAE\x9A\xE4\xB9\x89:
  67
  68  \xE8\xBF\x99\xE4\xB8\xAA\xE5\x8C\xBA\xE5\x9F\x9F\xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE5\xBD\x93\xE5\x89\x8D\xE8\xBF\x90\xE8\xA1\x8C\xE5\x86\x85\xE6\xA0\xB8\xE5\xAE\x9E\xE7\x8E\xB0\xE7\x9A\x84\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE7\x89\x88\xE6\x9C\xAC\xE5\x8F\xB7\xE3\x80\x82\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE5\x8F\xAF\xE4\xBB\xA5\xE9\x80\x9A\xE8\xBF\x87\xE8\xAF\xBB
  69  \xE5\x8F\x96\xE6\xAD\xA4\xE7\x89\x88\xE6\x9C\xAC\xE5\x8F\xB7\xE4\xBB\xA5\xE7\xA1\xAE\xE5\xAE\x9A\xE7\x89\xB9\xE5\xAE\x9A\xE7\x9A\x84\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE6\x98\xAF\xE5\x90\xA6\xE5\xAD\x98\xE5\x9C\xA8\xE3\x80\x82
  70
  71\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8C\x83\xE4\xBE\x8B:
  72
  73#define __kuser_helper_version (*(int32_t *)0xffff0ffc)
  74
  75void check_kuser_version(void)
  76{
  77        if (__kuser_helper_version < 2) {
  78                fprintf(stderr, "can't do atomic operations, kernel too old\n");
  79                abort();
  80        }
  81}
  82
  83\xE6\xB3\xA8\xE6\x84\x8F:
  84
  85  \xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x81\x87\xE8\xAE\xBE\xE8\xBF\x99\xE4\xB8\xAA\xE5\x9F\x9F\xE7\x9A\x84\xE5\x80\xBC\xE4\xB8\x8D\xE4\xBC\x9A\xE5\x9C\xA8\xE4\xBB\xBB\xE4\xBD\x95\xE5\x8D\x95\xE4\xB8\xAA\xE8\xBF\x9B\xE7\xA8\x8B\xE7\x9A\x84\xE7\x94\x9F\xE5\xAD\x98\xE6\x9C\x9F\xE5\x86\x85\xE6\x94\xB9\xE5\x8F\x98\xE3\x80\x82\xE4\xB9\x9F\xE5\xB0\xB1
  86  \xE6\x98\xAF\xE8\xAF\xB4\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE5\x9F\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE4\xBB\x85\xE5\x9C\xA8\xE5\xBA\x93\xE7\x9A\x84\xE5\x88\x9D\xE5\xA7\x8B\xE5\x8C\x96\xE9\x98\xB6\xE6\xAE\xB5\xE6\x88\x96\xE8\xBF\x9B\xE7\xA8\x8B\xE5\x90\xAF\xE5\x8A\xA8\xE9\x98\xB6\xE6\xAE\xB5\xE8\xAF\xBB\xE5\x8F\x96\xE4\xB8\x80\xE6\xAC\xA1\xE3\x80\x82
  87
  88kuser_get_tls
  89-------------
  90
  91\xE4\xBD\x8D\xE7\xBD\xAE:       0xffff0fe0
  92
  93\xE5\x8F\x82\xE8\x80\x83\xE5\x8E\x9F\xE5\x9E\x8B:
  94
  95  void * __kuser_get_tls(void);
  96
  97\xE8\xBE\x93\xE5\x85\xA5:
  98
  99  lr = \xE8\xBF\x94\xE5\x9B\x9E\xE5\x9C\xB0\xE5\x9D\x80
 100
 101\xE8\xBE\x93\xE5\x87\xBA:
 102
 103  r0 = TLS \xE5\x80\xBC
 104
 105\xE8\xA2\xAB\xE7\xAF\xA1\xE6\x94\xB9\xE7\x9A\x84\xE5\xAF\x84\xE5\xAD\x98\xE5\x99\xA8:
 106
 107  \xE6\x97\xA0
 108
 109\xE5\xAE\x9A\xE4\xB9\x89:
 110
 111  \xE8\x8E\xB7\xE5\x8F\x96\xE4\xB9\x8B\xE5\x89\x8D\xE9\x80\x9A\xE8\xBF\x87 __ARM_NR_set_tls \xE7\xB3\xBB\xE7\xBB\x9F\xE8\xB0\x83\xE7\x94\xA8\xE8\xAE\xBE\xE7\xBD\xAE\xE7\x9A\x84 TLS \xE5\x80\xBC\xE3\x80\x82
 112
 113\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8C\x83\xE4\xBE\x8B:
 114
 115typedef void * (__kuser_get_tls_t)(void);
 116#define __kuser_get_tls (*(__kuser_get_tls_t *)0xffff0fe0)
 117
 118void foo()
 119{
 120        void *tls = __kuser_get_tls();
 121        printf("TLS = %p\n", tls);
 122}
 123
 124\xE6\xB3\xA8\xE6\x84\x8F:
 125
 126  - \xE4\xBB\x85\xE5\x9C\xA8 __kuser_helper_version >= 1 \xE6\x97\xB6\xEF\xBC\x8C\xE6\xAD\xA4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\xAD\x98\xE5\x9C\xA8
 127    \xEF\xBC\x88\xE4\xBB\x8E\xE5\x86\x85\xE6\xA0\xB8\xE7\x89\x88\xE6\x9C\xAC 2.6.12 \xE5\xBC\x80\xE5\xA7\x8B\xEF\xBC\x89\xE3\x80\x82
 128
 129kuser_cmpxchg
 130-------------
 131
 132\xE4\xBD\x8D\xE7\xBD\xAE:       0xffff0fc0
 133
 134\xE5\x8F\x82\xE8\x80\x83\xE5\x8E\x9F\xE5\x9E\x8B:
 135
 136  int __kuser_cmpxchg(int32_t oldval, int32_t newval, volatile int32_t *ptr);
 137
 138\xE8\xBE\x93\xE5\x85\xA5:
 139
 140  r0 = oldval
 141  r1 = newval
 142  r2 = ptr
 143  lr = \xE8\xBF\x94\xE5\x9B\x9E\xE5\x9C\xB0\xE5\x9D\x80
 144
 145\xE8\xBE\x93\xE5\x87\xBA:
 146
 147  r0 = \xE6\x88\x90\xE5\x8A\x9F\xE4\xBB\xA3\xE7\xA0\x81 (\xE9\x9B\xB6\xE6\x88\x96\xE9\x9D\x9E\xE9\x9B\xB6)
 148  C flag = \xE5\xA6\x82\xE6\x9E\x9C r0 == 0 \xE5\x88\x99\xE7\xBD\xAE 1\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C r0 != 0 \xE5\x88\x99\xE6\xB8\x85\xE9\x9B\xB6\xE3\x80\x82
 149
 150\xE8\xA2\xAB\xE7\xAF\xA1\xE6\x94\xB9\xE7\x9A\x84\xE5\xAF\x84\xE5\xAD\x98\xE5\x99\xA8:
 151
 152  r3, ip, flags
 153
 154\xE5\xAE\x9A\xE4\xB9\x89:
 155
 156  \xE4\xBB\x85\xE5\x9C\xA8 *ptr \xE4\xB8\xBA oldval \xE6\x97\xB6\xE5\x8E\x9F\xE5\xAD\x90\xE4\xBF\x9D\xE5\xAD\x98 newval \xE4\xBA\x8E *ptr \xE4\xB8\xAD\xE3\x80\x82
 157  \xE5\xA6\x82\xE6\x9E\x9C *ptr \xE8\xA2\xAB\xE6\x94\xB9\xE5\x8F\x98\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E\xE5\x80\xBC\xE4\xB8\xBA\xE9\x9B\xB6\xEF\xBC\x8C\xE5\x90\xA6\xE5\x88\x99\xE4\xB8\xBA\xE9\x9D\x9E\xE9\x9B\xB6\xE5\x80\xBC\xE3\x80\x82
 158  \xE5\xA6\x82\xE6\x9E\x9C *ptr \xE8\xA2\xAB\xE6\x94\xB9\xE5\x8F\x98\xEF\xBC\x8C\xE5\x88\x99 C flag \xE4\xB9\x9F\xE4\xBC\x9A\xE8\xA2\xAB\xE7\xBD\xAE 1\xEF\xBC\x8C\xE4\xBB\xA5\xE5\xAE\x9E\xE7\x8E\xB0\xE8\xB0\x83\xE7\x94\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE4\xB8\xAD\xE7\x9A\x84\xE6\xB1\x87\xE7\xBC\x96
 159  \xE4\xBC\x98\xE5\x8C\x96\xE3\x80\x82
 160
 161\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8C\x83\xE4\xBE\x8B:
 162
 163typedef int (__kuser_cmpxchg_t)(int oldval, int newval, volatile int *ptr);
 164#define __kuser_cmpxchg (*(__kuser_cmpxchg_t *)0xffff0fc0)
 165
 166int atomic_add(volatile int *ptr, int val)
 167{
 168        int old, new;
 169
 170        do {
 171                old = *ptr;
 172                new = old + val;
 173        } while(__kuser_cmpxchg(old, new, ptr));
 174
 175        return new;
 176}
 177
 178\xE6\xB3\xA8\xE6\x84\x8F:
 179
 180  - \xE8\xBF\x99\xE4\xB8\xAA\xE4\xBE\x8B\xE7\xA8\x8B\xE5\xB7\xB2\xE6\xA0\xB9\xE6\x8D\xAE\xE9\x9C\x80\xE8\xA6\x81\xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE5\x86\x85\xE5\xAD\x98\xE5\xB1\x8F\xE9\x9A\x9C\xE3\x80\x82
 181
 182  - \xE4\xBB\x85\xE5\x9C\xA8 __kuser_helper_version >= 2 \xE6\x97\xB6\xEF\xBC\x8C\xE6\xAD\xA4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\xAD\x98\xE5\x9C\xA8
 183    \xEF\xBC\x88\xE4\xBB\x8E\xE5\x86\x85\xE6\xA0\xB8\xE7\x89\x88\xE6\x9C\xAC 2.6.12 \xE5\xBC\x80\xE5\xA7\x8B\xEF\xBC\x89\xE3\x80\x82
 184
 185kuser_memory_barrier
 186--------------------
 187
 188\xE4\xBD\x8D\xE7\xBD\xAE:       0xffff0fa0
 189
 190\xE5\x8F\x82\xE8\x80\x83\xE5\x8E\x9F\xE5\x9E\x8B:
 191
 192  void __kuser_memory_barrier(void);
 193
 194\xE8\xBE\x93\xE5\x85\xA5:
 195
 196  lr = \xE8\xBF\x94\xE5\x9B\x9E\xE5\x9C\xB0\xE5\x9D\x80
 197
 198\xE8\xBE\x93\xE5\x87\xBA:
 199
 200  \xE6\x97\xA0
 201
 202\xE8\xA2\xAB\xE7\xAF\xA1\xE6\x94\xB9\xE7\x9A\x84\xE5\xAF\x84\xE5\xAD\x98\xE5\x99\xA8:
 203
 204  \xE6\x97\xA0
 205
 206\xE5\xAE\x9A\xE4\xB9\x89:
 207
 208  \xE5\xBA\x94\xE7\x94\xA8\xE4\xBA\x8E\xE4\xBB\xBB\xE4\xBD\x95\xE9\x9C\x80\xE8\xA6\x81\xE5\x86\x85\xE5\xAD\x98\xE5\xB1\x8F\xE9\x9A\x9C\xE4\xBB\xA5\xE9\x98\xB2\xE6\xAD\xA2\xE6\x89\x8B\xE5\x8A\xA8\xE6\x95\xB0\xE6\x8D\xAE\xE4\xBF\xAE\xE6\x94\xB9\xE5\xB8\xA6\xE6\x9D\xA5\xE7\x9A\x84\xE4\xB8\x80\xE8\x87\xB4\xE6\x80\xA7\xE9\x97\xAE\xE9\xA2\x98\xEF\xBC\x8C\xE4\xBB\xA5\xE5\x8F\x8A
 209  __kuser_cmpxchg \xE4\xB8\xAD\xE3\x80\x82
 210
 211\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8C\x83\xE4\xBE\x8B:
 212
 213typedef void (__kuser_dmb_t)(void);
 214#define __kuser_dmb (*(__kuser_dmb_t *)0xffff0fa0)
 215
 216\xE6\xB3\xA8\xE6\x84\x8F:
 217
 218  - \xE4\xBB\x85\xE5\x9C\xA8 __kuser_helper_version >= 3 \xE6\x97\xB6\xEF\xBC\x8C\xE6\xAD\xA4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\xAD\x98\xE5\x9C\xA8
 219    \xEF\xBC\x88\xE4\xBB\x8E\xE5\x86\x85\xE6\xA0\xB8\xE7\x89\x88\xE6\x9C\xAC 2.6.15 \xE5\xBC\x80\xE5\xA7\x8B\xEF\xBC\x89\xE3\x80\x82
 220
 221kuser_cmpxchg64
 222---------------
 223
 224\xE4\xBD\x8D\xE7\xBD\xAE:       0xffff0f60
 225
 226\xE5\x8F\x82\xE8\x80\x83\xE5\x8E\x9F\xE5\x9E\x8B:
 227
 228  int __kuser_cmpxchg64(const int64_t *oldval,
 229                        const int64_t *newval,
 230                        volatile int64_t *ptr);
 231
 232\xE8\xBE\x93\xE5\x85\xA5:
 233
 234  r0 = \xE6\x8C\x87\xE5\x90\x91 oldval
 235  r1 = \xE6\x8C\x87\xE5\x90\x91 newval
 236  r2 = \xE6\x8C\x87\xE5\x90\x91\xE7\x9B\xAE\xE6\xA0\x87\xE5\x80\xBC
 237  lr = \xE8\xBF\x94\xE5\x9B\x9E\xE5\x9C\xB0\xE5\x9D\x80
 238
 239\xE8\xBE\x93\xE5\x87\xBA:
 240
 241  r0 = \xE6\x88\x90\xE5\x8A\x9F\xE4\xBB\xA3\xE7\xA0\x81 (\xE9\x9B\xB6\xE6\x88\x96\xE9\x9D\x9E\xE9\x9B\xB6)
 242  C flag = \xE5\xA6\x82\xE6\x9E\x9C r0 == 0 \xE5\x88\x99\xE7\xBD\xAE 1\xEF\xBC\x8C\xE5\xA6\x82\xE6\x9E\x9C r0 != 0 \xE5\x88\x99\xE6\xB8\x85\xE9\x9B\xB6\xE3\x80\x82
 243
 244\xE8\xA2\xAB\xE7\xAF\xA1\xE6\x94\xB9\xE7\x9A\x84\xE5\xAF\x84\xE5\xAD\x98\xE5\x99\xA8:
 245
 246  r3, lr, flags
 247
 248\xE5\xAE\x9A\xE4\xB9\x89:
 249
 250  \xE4\xBB\x85\xE5\x9C\xA8 *ptr \xE7\xAD\x89\xE4\xBA\x8E *oldval \xE6\x8C\x87\xE5\x90\x91\xE7\x9A\x84 64 \xE4\xBD\x8D\xE5\x80\xBC\xE6\x97\xB6\xEF\xBC\x8C\xE5\x8E\x9F\xE5\xAD\x90\xE4\xBF\x9D\xE5\xAD\x98 *newval
 251  \xE6\x8C\x87\xE5\x90\x91\xE7\x9A\x84 64 \xE4\xBD\x8D\xE5\x80\xBC\xE4\xBA\x8E *ptr \xE4\xB8\xAD\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C *ptr \xE8\xA2\xAB\xE6\x94\xB9\xE5\x8F\x98\xEF\xBC\x8C\xE5\x88\x99\xE8\xBF\x94\xE5\x9B\x9E\xE5\x80\xBC\xE4\xB8\xBA\xE9\x9B\xB6\xEF\xBC\x8C
 252  \xE5\x90\xA6\xE5\x88\x99\xE4\xB8\xBA\xE9\x9D\x9E\xE9\x9B\xB6\xE5\x80\xBC\xE3\x80\x82
 253
 254  \xE5\xA6\x82\xE6\x9E\x9C *ptr \xE8\xA2\xAB\xE6\x94\xB9\xE5\x8F\x98\xEF\xBC\x8C\xE5\x88\x99 C flag \xE4\xB9\x9F\xE4\xBC\x9A\xE8\xA2\xAB\xE7\xBD\xAE 1\xEF\xBC\x8C\xE4\xBB\xA5\xE5\xAE\x9E\xE7\x8E\xB0\xE8\xB0\x83\xE7\x94\xA8\xE4\xBB\xA3\xE7\xA0\x81\xE4\xB8\xAD\xE7\x9A\x84\xE6\xB1\x87\xE7\xBC\x96
 255  \xE4\xBC\x98\xE5\x8C\x96\xE3\x80\x82
 256
 257\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8C\x83\xE4\xBE\x8B:
 258
 259typedef int (__kuser_cmpxchg64_t)(const int64_t *oldval,
 260                                  const int64_t *newval,
 261                                  volatile int64_t *ptr);
 262#define __kuser_cmpxchg64 (*(__kuser_cmpxchg64_t *)0xffff0f60)
 263
 264int64_t atomic_add64(volatile int64_t *ptr, int64_t val)
 265{
 266        int64_t old, new;
 267
 268        do {
 269                old = *ptr;
 270                new = old + val;
 271        } while(__kuser_cmpxchg64(&old, &new, ptr));
 272
 273        return new;
 274}
 275
 276\xE6\xB3\xA8\xE6\x84\x8F:
 277
 278  - \xE8\xBF\x99\xE4\xB8\xAA\xE4\xBE\x8B\xE7\xA8\x8B\xE5\xB7\xB2\xE6\xA0\xB9\xE6\x8D\xAE\xE9\x9C\x80\xE8\xA6\x81\xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE5\x86\x85\xE5\xAD\x98\xE5\xB1\x8F\xE9\x9A\x9C\xE3\x80\x82
 279
 280  - \xE7\x94\xB1\xE4\xBA\x8E\xE8\xBF\x99\xE4\xB8\xAA\xE8\xBF\x87\xE7\xA8\x8B\xE7\x9A\x84\xE4\xBB\xA3\xE7\xA0\x81\xE9\x95\xBF\xE5\xBA\xA6\xEF\xBC\x88\xE6\xAD\xA4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE8\xB7\xA8\xE8\xB6\x8A 2 \xE4\xB8\xAA\xE5\xB8\xB8\xE8\xA7\x84\xE7\x9A\x84 kuser \xE2\x80\x9C\xE6\xA7\xBD\xE2\x80\x9D\xEF\xBC\x89\xEF\xBC\x8C
 281    \xE5\x9B\xA0\xE6\xAD\xA4 0xffff0f80 \xE4\xB8\x8D\xE8\xA2\xAB\xE4\xBD\x9C\xE4\xB8\xBA\xE6\x9C\x89\xE6\x95\x88\xE7\x9A\x84\xE5\x85\xA5\xE5\x8F\xA3\xE7\x82\xB9\xE3\x80\x82
 282
 283  - \xE4\xBB\x85\xE5\x9C\xA8 __kuser_helper_version >= 5 \xE6\x97\xB6\xEF\xBC\x8C\xE6\xAD\xA4\xE8\xBE\x85\xE5\x8A\xA9\xE4\xBB\xA3\xE7\xA0\x81\xE5\xAD\x98\xE5\x9C\xA8
 284    \xEF\xBC\x88\xE4\xBB\x8E\xE5\x86\x85\xE6\xA0\xB8\xE7\x89\x88\xE6\x9C\xAC 3.1 \xE5\xBC\x80\xE5\xA7\x8B\xEF\xBC\x89\xE3\x80\x82
 285
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.