Advertisement
Guest User

bitmine.ch CoinCraft Desk Factory boot.pyFirmware 2014022115

a guest
Feb 27th, 2014
313
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. #!/usr/bin/python
  2. #
  3. # MinerOS bootup manager for CoinCraft-based systems
  4. #
  5. # Copyright (C) 2013-2014 BITMINE AG
  6. #
  7.  
  8. import RPIO
  9. import os
  10. import pylcdlib
  11. import time
  12. import sqlite3
  13. import pexpect
  14. import sys
  15.  
  16.  
  17. MINEROS_DB_LOCATION = '/mineros/mineros.db'
  18. FW_UPDATE_LOCATION = '/update.tar.bz2'
  19.  
  20.  
  21. def init_empty_db():
  22. try:
  23. os.remove("/mineros/mineros.db")
  24. except:
  25. pass
  26.  
  27. os.system("sqlite3 /mineros/mineros.db < /mineros/initdb.sql")
  28.  
  29. def start_webui():
  30. os.system('start-stop-daemon --start --background -m --oknodo --pidfile /run/mineroswebd.pid --exec python -- /mineros/web/index.py')
  31.  
  32.  
  33. def stop_webui():
  34. os.system('start-stop-daemon --stop --pidfile /run/mineroswebd.pid --exec python -- /mineros/web/index.py')
  35.  
  36.  
  37. def start_cgminer():
  38. conn = sqlite3.connect(MINEROS_DB_LOCATION)
  39. c = conn.cursor()
  40. c.execute('SELECT * FROM cgminer LIMIT 1')
  41. row = c.fetchone()
  42.  
  43. a1_options='16000:800000:8000'
  44.  
  45. if row[13]=='0':
  46. a1_options='16000:600000:4000'
  47. elif row[13]=='1':
  48. a1_options='16000:800000:8000'
  49. elif row[13]=='2':
  50. a1_options='16000:1000000:8000'
  51.  
  52. os.system('start-stop-daemon --start --background -m --oknodo --pidfile /run/cgminer.pid --exec cgminer -- --text-only --lowmem --bitmine-a1-options '+a1_options+' -o '+row[1]+' -O '+row[2]+':'+row[3]+' -o '+row[4]+' -O '+row[5]+':'+row[6]+' -o '+row[7]+' -O '+row[8]+':'+row[9]+' '+row[10]+' --api-allow '+row[12]+' --api-listen --queue 50 '+row[13]+' &')
  53.  
  54. c.close()
  55.  
  56.  
  57. def stop_cgminer():
  58. os.system('start-stop-daemon --stop --pidfile /run/cgminer.pid --exec cgminer')
  59.  
  60.  
  61.  
  62. def start():
  63. # Load necessary kernel modules
  64. os.system("modprobe i2c-bcm2708")
  65. os.system("modprobe i2c-dev")
  66. os.system("modprobe w1-gpio")
  67. os.system("modprobe w1-therm")
  68.  
  69. lcd = pylcdlib.lcd(0x21,1)
  70. lcd.lcd_puts("CoinCraft Desk",1)
  71. lcd.lcd_puts("booting...",2)
  72.  
  73. time.sleep(1)
  74.  
  75. # Check if system settings database exists already, otherwise create it
  76. if os.path.exists(MINEROS_DB_LOCATION) != True:
  77. init_empty_db()
  78.  
  79. # Check if there's a firmware upgrade to decompress
  80. if os.path.exists(FW_UPDATE_LOCATION) == True:
  81. lcd.lcd_puts("Firmware upgrade",1)
  82. lcd.lcd_puts("DO NOT POWER OFF",2)
  83. time.sleep(5)
  84. os.chdir("/")
  85. os.system("tar xjf " + FW_UPDATE_LOCATION)
  86. os.remove(FW_UPDATE_LOCATION)
  87. lcd.lcd_puts("Done. Rebooting",2)
  88. time.sleep(3)
  89. os.system("reboot")
  90. sys.exit(0)
  91.  
  92. # Check if we have to generate a static resolv.conf file
  93. conn = sqlite3.connect(MINEROS_DB_LOCATION)
  94. c = conn.cursor()
  95. c.execute('SELECT * FROM networking LIMIT 1')
  96. row = c.fetchone()
  97.  
  98. if row[2]==0:
  99. f=open('/var/run/resolv.conf','w')
  100. f.write("nameserver "+row[6]+"\nnameserver "+row[7]+"\n")
  101. f.close()
  102.  
  103.  
  104. # set up GPIO output channel
  105. RPIO.setwarnings(False)
  106. RPIO.setup(22, RPIO.OUT)
  107.  
  108. # set gpio 22 to high
  109. RPIO.output(22, True)
  110.  
  111. lcd.lcd_puts("Loading WebUI ",2)
  112. start_webui()
  113. time.sleep(1)
  114.  
  115. lcd.lcd_puts("Loading cgminer",2)
  116. start_cgminer()
  117. time.sleep(1)
  118.  
  119. lcd.lcd_puts("Loading minerosd",2)
  120. os.system("python /mineros/minerosd.py start")
  121. time.sleep(1)
  122.  
  123.  
  124.  
  125.  
  126. def stop():
  127. os.system("python /mineros/minerosd.py stop")
  128.  
  129. lcd = pylcdlib.lcd(0x21,1)
  130. lcd.lcd_puts("CoinCraft Desk",1)
  131. lcd.lcd_puts("Shutting down",2)
  132.  
  133. stop_webui()
  134. stop_cgminer()
  135.  
  136. # set up GPIO output channel
  137. RPIO.setwarnings(False)
  138. RPIO.setup(22, RPIO.OUT)
  139.  
  140. # set gpio 22 to low
  141. RPIO.output(22, False)
  142. lcd.lcd_puts("", 1)
  143. lcd.lcd_puts("", 2)
  144.  
  145.  
  146.  
  147. # Entry point
  148.  
  149. if sys.argv[1] == 'start':
  150. start()
  151. elif sys.argv[1] == 'stop':
  152. stop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement